home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / program / gur30eng.lha / Guru3.0 - English / Sources / Guru30.s < prev    next >
Text File  |  1996-02-10  |  46KB  |  2,773 lines

  1. * The Guru 3.0(2)
  2. *
  3. * The program to make guru messages understandable !!
  4. *
  5. * Features :    Fully font-sensitive intuition-based front end
  6. *        Good descriptions
  7. *        Looks cool on ALL workbenches (2 to 256 col, palette sensitive)
  8. *        2.0+ compatible, 680x0 compatible
  9. *        1.2/1.3 compatible (mostly)
  10. *        Awfully delayed
  11. *
  12. * Code & design: Emiel Lensink
  13. * Created using: A3000, kick 3.1, 2Mb chip, 12Mb fast
  14. *         Piccolo graphics card
  15. *         Devpac 3.04
  16. *         PPaint 6.0
  17. *         The Ultimate Graphics Convertor (also by me, but not completely finished (yet))
  18. *
  19. * Created using: CyberVision Gfx card, Devpac 3.14
  20. *
  21. * Thanx to:    Commodore (RIP) for the AMIGA
  22. *
  23. **********************************************************************************************
  24.  
  25. * Version stuff
  26.     bra.s    ProgBits
  27.     dc.b    ' $VER: TheGuru 3.02 $',10,0
  28.     dc.b    ' $COPYRIGHT: Copyright © 1996 by Emiel Lensink$',0
  29.     cnop    0,4
  30. ProgBits
  31.  
  32. * Includese
  33.  
  34.     include    exec/exec.i
  35.     include exec/exec_lib.i        
  36.     include    intuition/intuition.i        
  37.     include    intuition/intuition_lib.i
  38.     include graphics/graphics_lib.i
  39.     include graphics/gfx.i
  40.     include dos/dos.i
  41.     include dos/dos_lib.i
  42.     include workbench/startup.i
  43.     include workbench/icon_lib.i
  44.     include workbench/workbench.i
  45.     
  46.     include /subs/easystart.i
  47.     
  48. * Libraries
  49.  
  50.     move.w        #4,a0
  51.     move.l        (a0),a1
  52.     move.w     LIB_VERSION(a1),Execvers
  53.     
  54.     moveq        #0,d0            Open Intuition
  55.     lea        Intname,a1
  56.     CALLEXEC    OpenLibrary
  57.     move.l        d0,_IntuitionBase
  58.     beq        NoInt
  59.  
  60.     moveq        #0,d0            Open Graphics
  61.     lea        Gfxname,a1
  62.     CALLEXEC    OpenLibrary
  63.     move.l        d0,_GfxBase
  64.     beq        NoGfx
  65.  
  66.     moveq        #0,d0            Open DOS
  67.     lea        Dosname,a1
  68.     CALLEXEC    OpenLibrary
  69.     move.l        d0,_DOSBase
  70.     beq        NoDos            
  71.  
  72.     moveq        #120,d0
  73.     move.l        #MEMF_ANY!MEMF_CLEAR,d1
  74.     CALLEXEC    AllocMem
  75.     move.l        d0,FakeRast
  76.     beq        NoFRast    
  77.  
  78. * setup stuff
  79.  
  80.     tst.l        returnMsg        Workbench ?
  81.     beq        CliStart
  82.     
  83.     move.l        returnMsg,a3
  84.     move.l        sm_ArgList(a3),a3
  85.     move.l        (a3),d1        
  86.     CALLDOS        CurrentDir        (offset 0:wa_Lock) CD to program startup dir.
  87.  
  88.     lea        Iconname,a1        Open icon library        
  89.     moveq        #0,d0
  90.     CALLEXEC    OpenLibrary
  91.     move.l        d0,_IconBase
  92.     beq        CliStart        No icon library
  93.     
  94.     move.l        returnMsg,a3
  95.     move.l        sm_ArgList(a3),a3
  96.     move.l        wa_Name(a3),a0
  97.     CALLICON    GetDiskObject        ¯|
  98.     move.l        d0,a5             V
  99.     tst.l        d0            Did we get it ?
  100.     beq        NoDiskO
  101.  
  102.     move.l        do_ToolTypes(a5),a0    Check tooltypes
  103.     lea        Language,a1        = [LANGUAGE]        
  104.     CALLICON    FindToolType
  105.     tst.l        d0
  106.     beq.s        DefLF
  107.     
  108.     move.l        d0,a0            Pointer naar f'name
  109.     bsr        LoadFile
  110.     tst.l        d0
  111.     beq.s        DefLF
  112.     move.l        d0,LangSize
  113.     move.l        a0,LangBuff
  114.     bsr        DecodeLF
  115.  
  116. DefLF    move.l        do_ToolTypes(a5),a0    Check tooltypes
  117.     lea        DataFile,a1        = [DATAFILE=]        
  118.     CALLICON    FindToolType
  119.     tst.l        d0
  120.     beq.s        DefDF
  121.     
  122.     move.l        d0,a0            Pointer naar f'name
  123.     bsr        LoadFile
  124.     tst.l        d0
  125.     beq.s        DefDF
  126.     move.l        d0,DataSize
  127.     move.l        a0,DataBuff
  128.  
  129. DefDF    move.l        do_ToolTypes(a5),a0    Check tooltypes
  130.     lea        ForceTopaz,a1        = [TOPAZ]        
  131.     CALLICON    FindToolType
  132.     tst.l        d0
  133.     beq.s        NoTOPAZ
  134.     move.b        #1,tt_Topaz
  135.  
  136. NoTOPAZ    move.l        do_ToolTypes(a5),a0    Check tooltypes
  137.     lea        AutoMatic,a1        = [AUTMATIC]        
  138.     CALLICON    FindToolType
  139.     tst.l        d0
  140.     beq.s        NoAUTO
  141.     move.b        #1,tt_AutoMatic
  142.     
  143. NoAUTO    move.l        do_ToolTypes(a5),a0    Check tooltypes
  144.     lea        AutoFront,a1        = [AUTOTOFRONT]        
  145.     CALLICON    FindToolType
  146.     tst.l        d0
  147.     beq.s        NoATFR
  148.     move.b        #1,tt_AutoFront
  149.     
  150. NoATFR    cmpi.w        #36,Execvers
  151.     blt.s        .kickskip
  152.  
  153.     move.l        do_ToolTypes(a5),a0
  154.     lea        PubScr,a1        = [PUBSCREEN=]
  155.     CALLICON    FindToolType
  156.     tst.l        d0
  157.     beq.s        NoPUBS
  158.     move.b        #1,tt_PubScreen
  159.     
  160.     move.l        d0,a0
  161.     CALLINT        LockPubScreen
  162.     move.l        d0,ScreenLock
  163.     beq.s        TTNoLock
  164.     bra.s        NoPUBS
  165.  
  166. .kickskip
  167.  
  168. TTNoLock
  169.     move.b        #0,tt_PubScreen        lock failed, use wb
  170.         
  171. NoPUBS    move.l        a5,a0
  172.     CALLICON    FreeDiskObject
  173.  
  174. NoDiskO    move.l        _IconBase,a1
  175.     CALLEXEC    CloseLibrary
  176.  
  177. CliStart
  178.     * do we want to go on??
  179.     cmpi.b        #1,tt_AutoMatic
  180.     bne.s        .nomat1
  181.  
  182.     move.l        $100.w,d0        Enforcer...
  183.     tst.l        d0            Was there a guru??
  184.     beq        NoGuruBeen        Nope.... quit then
  185.  
  186. .nomat1    cmpi.l        #0,DataSize
  187.     bne.s        .skip2
  188.     lea        DefData,a0
  189.     bsr        LoadFile
  190.     tst.l        d0
  191.     beq        NoDATAErr        Could load no guru data file
  192.     move.l        d0,DataSize
  193.     move.l        a0,DataBuff
  194.  
  195. .skip2    move.l        DataBuff,a1
  196.     move.l        a1,a2
  197.     add.l        DataSize,a2
  198.     
  199.     lea        GenAl,a0
  200.     bsr        Search
  201.     move.l        a0,d0
  202.     cmpi.l        #0,d0
  203.     beq        ErrInDATAErr
  204.     move.l        a0,GeneralAlert
  205.     
  206.     lea        Sub1,a0
  207.     bsr        Search
  208.     move.l        a0,d0
  209.     cmpi.l        #0,d0
  210.     beq        ErrInDATAErr
  211.     move.l        a0,Subsys1
  212.  
  213.     lea        Sub2,a0
  214.     bsr        Search
  215.     move.l        a0,d0
  216.     cmpi.l        #0,d0
  217.     beq        ErrInDATAErr
  218.     move.l        a0,Subsys2
  219.  
  220.     lea        Sub3,a0
  221.     bsr        Search
  222.     move.l        a0,d0
  223.     cmpi.l        #0,d0
  224.     beq        ErrInDATAErr
  225.     move.l        a0,Subsys3
  226.  
  227.     lea        DosAl,a0
  228.     bsr        Search
  229.     move.l        a0,d0
  230.     cmpi.l        #0,d0
  231.     beq        ErrInDATAErr
  232.     move.l        a0,DosAlert
  233.  
  234.     lea        UnkGuru,a0
  235.     bsr        Search
  236.     move.l        a0,d0
  237.     cmpi.l        #0,d0
  238.     beq        ErrInDATAErr
  239.     move.l        a0,UnknownGuru
  240.     
  241.     lea        UnkDos,a0
  242.     bsr        Search
  243.     move.l        a0,d0
  244.     cmpi.l        #0,d0
  245.     beq        ErrInDATAErr
  246.     move.l        a0,UnknownDos
  247.         
  248.     lea        Dead,a0
  249.     bsr        Search
  250.     move.l        a0,d0
  251.     cmpi.l        #0,d0
  252.     beq        ErrInDATAErr
  253.     move.l        a0,Deadend
  254.  
  255.     lea        Reco,a0
  256.     bsr        Search
  257.     move.l        a0,d0
  258.     cmpi.l        #0,d0
  259.     beq        ErrInDATAErr
  260.     move.l        a0,Recovery
  261.  
  262.     lea        EndFile,a0
  263.     bsr        Search
  264.     move.l        a0,d0
  265.     cmpi.l        #0,d0
  266.     beq        ErrInDATAErr
  267.     move.l        a0,EndOfFile
  268.     
  269.     bsr        FilterFile
  270.  
  271.     cmpi.b        #1,tt_PubScreen
  272.     beq.s        .skip3
  273.     
  274.     cmpi.w        #36,Execvers
  275.     blt.s        .kickskip
  276.  
  277.     lea        0.w,a0
  278.     CALLINT        LockPubScreen
  279.     move.l        d0,ScreenLock
  280.     beq        NoScLock
  281.     bra.s        .skip3
  282.  
  283. .kickskip
  284.     lea        TempPrintBuff,a0
  285.     move.l        #2000,d0
  286.     moveq        #WBENCHSCREEN,d1
  287.     lea        0.w,a1
  288.     CALLINT        GetScreenData
  289.     lea        TempPrintBuff,a0
  290.     move.l        a0,ScreenLock
  291.             
  292. .skip3    move.l        ScreenLock,a0
  293.     move.l        sc_Font(a0),ScreenFont        Get the font 
  294.  
  295.     cmpi.b        #1,tt_Topaz
  296.     bne.s        .skipx
  297.     lea        Topaz,a6
  298.     move.l        a6,ScreenFont
  299.  
  300. .skipx    moveq        #0,d0                Get sizes of windowborders
  301.     moveq        #0,d1
  302.     move.b        sc_WBorTop(a0),d0
  303.     move.b        sc_WBorLeft(a0),d1
  304.     move.l        sc_Font(a0),a0
  305.     move.w        ta_YSize(a0),d2
  306.     add.w        d2,d0
  307.     addq.w        #1,d0
  308.     move.w        d1,LeftBorder
  309.     move.w        d0,TopBorder
  310.  
  311.     move.l        ScreenFont,a0
  312.     CALLGRAF    OpenFont
  313.     move.l        d0,Font
  314.     beq        NoFont
  315.  
  316.     move.l        FakeRast,a1
  317.     CALLGRAF    InitRastPort
  318.  
  319.     move.l        Font,a0
  320.     move.l        FakeRast,a1
  321.     CALLGRAF    SetFont    
  322.  
  323.     bsr        WidestText            Find widest text
  324.     bsr        WidestLetter            Find widest letter
  325.     bsr        WidestArrow            Find widest arrow
  326.  
  327.     move.l        Font,a0
  328.     moveq        #0,d0
  329.     move.w        tf_YSize(a0),d0
  330.     move.w        d0,FontY    
  331.     move.w        tf_Baseline(a0),d0
  332.     move.w        d0,FontBase
  333.  
  334.     move.l        ScreenLock,WinScreen
  335.  
  336.     lea        Window1.3,a4
  337.     lea        WinTags,a0
  338.     move.w        FontY,d0
  339.     mulu.w        #13,d0
  340.     add.w        #36,d0
  341.     move.l        d0,28(a0)    
  342.  
  343.     add.w        TopBorder,d0
  344.     addq.w        #3,d0
  345.     move.w        d0,6(a4)
  346.     subq.w        #3,d0
  347.     
  348.     divu.w        #2,d0
  349.     move.l        ScreenLock,a1
  350.     move.w        sc_Height(a1),d1
  351.     divu.w        #2,d1
  352.     sub.w        d0,d1
  353.     move.w        d1,14(a0)
  354.     move.w        d1,2(a4)
  355.  
  356.     cmpi.w        #0,d1
  357.     blt        FontTooBig
  358.  
  359.     move.l        Widest,d0
  360.     mulu.w        #3,d0
  361.     add.w        #84,d0
  362.     move.l        WidLett,d1
  363.     mulu.w        #4,d1
  364.     add.w        d1,d0
  365.     move.l        d0,20(a0)
  366.     add.w        LeftBorder,d0
  367.     add.w        LeftBorder,d0
  368.     move.w        d0,4(a4)
  369.     sub.w        LeftBorder,d0
  370.     sub.w        LeftBorder,d0
  371.  
  372.     move.l        d0,WindowWidth
  373.  
  374.     move.l        d0,d6
  375.     divu.w        #2,d0
  376.     add.w        LeftBorder,d0
  377.     move.w        sc_Width(a1),d1
  378.     divu.w        #2,d1
  379.     sub.w        d0,d1
  380.     move.w        d1,6(a0)    
  381.     move.w        d1,(a4)
  382.  
  383.     cmpi.w        #0,d1
  384.     blt        FontTooBig
  385.  
  386.     move.l        d6,d0
  387.  
  388. CalcBm    lea        FakeBitmap,a0
  389.     sub.w        #22,d0
  390.     move.l        d0,DisplayWidth
  391.     divu.w        #16,d0
  392.     move.w        d0,d1
  393.     andi.l         #$0000FFFF,d1
  394.     swap        d0
  395.     cmpi.w        #0,d0
  396.     beq.s        .skip
  397.     addq.l        #1,d1
  398.  
  399. .skip    mulu        #2,d1                Don't know why, bitmap HAS to be word-
  400.     move.w        d1,(a0)                aligned with even nr of words (?)
  401.     move.w        FontY,d0
  402.     mulu.w        #35,d0
  403.     move.w        d0,bm_Rows(a0)
  404.     andi.l         #$0000FFFF,d0
  405.     move.l        a0,a5
  406.  
  407.     mulu        d1,d0
  408.     move.l        d0,FakeBmSize    
  409.     move.l        #MEMF_CHIP!MEMF_CLEAR,d1
  410.     CALLEXEC    AllocMem
  411.     move.l        d0,FakeBmPtr
  412.     beq        NoFakeBm
  413.     
  414.     move.l        d0,8(a5)
  415.     
  416.     move.l        FakeRast,a1
  417.     lea        FakeBitmap,a0
  418.     move.l        a0,rp_BitMap(a1)
  419.  
  420.     cmpi.w        #36,Execvers
  421.     blt.s        .kickskip
  422.  
  423.     lea        0.w,a0                Open Window 2.0    
  424.     lea        WinTags,a1
  425.     CALLINT        OpenWindowTagList
  426.     move.l        d0,WindowPtr
  427.     beq        NoWin
  428.     bra.s        .kickskip2
  429.     
  430. .kickskip
  431.     lea        Window1.3,a0
  432.     CALLINT        OpenWindow
  433.     move.l        d0,WindowPtr
  434.     beq        NoWin
  435.  
  436. .kickskip2
  437.      move.l        WindowPtr,a0
  438.     move.l        wd_RPort(a0),WindowRastPort
  439.     move.l        wd_UserPort(a0),WindowUserPort
  440.  
  441.     move.l        wd_WScreen(a0),a0
  442.     lea        sc_ViewPort(a0),a0
  443.     move.l        vp_ColorMap(a0),ScreenColorMap
  444.     
  445.     move.l        WindowPtr,a0
  446.     move.l        wd_WScreen(a0),a0
  447.     lea        sc_RastPort(a0),a0
  448.     move.l        rp_BitMap(a0),a0
  449.     moveq        #0,d0
  450.     move.b        bm_Depth(a0),d0
  451.     move.b        d0,ScreenDepth
  452.  
  453.     move.l        Font,a0
  454.     move.l        WindowRastPort,a1
  455.     CALLGRAF    SetFont    
  456.  
  457.     bsr        DoBorders            Bordersize
  458.     bsr        DoWidths            Gadget widths
  459.     bsr        DoPositions            Position gadgets
  460.     bsr        InsertText            Put text in them
  461.     bsr        CenterText            Center it
  462.     bsr        GadCol
  463.  
  464.     lea        Gad29,a1            Add gadget 29 to the list
  465.     lea        Gad28,a0
  466.     move.l        a1,(a0)
  467.  
  468.     bsr        InitPropGad
  469.  
  470.     move.l        WindowPtr,a0            Draw gadgets
  471.     lea        WinGads,a1
  472.     moveq        #-1,d0
  473.     moveq        #-1,d1
  474.     move.w        #0,a2
  475.     CALLINT        AddGList
  476.  
  477.     lea        WinGads,a0
  478.     move.l        WindowPtr,a1
  479.     move.w        #0,a2
  480.     moveq        #-1,d0
  481.     CALLINT        RefreshGList
  482.  
  483.     bsr        InitIndCoords
  484.     bsr        SubRefresh
  485.  
  486.     bsr        DrawLogo
  487. * Main core
  488.     * was the prog started in auto-mode?
  489.     
  490.     tst.b        tt_AutoMatic
  491.     bne        Gadg24
  492.  
  493.  
  494. Mainloop move.l        WindowUserPort,a0
  495.     CALLEXEC    WaitPort
  496.  
  497. Message    move.l        WindowUserPort,a0
  498.     CALLEXEC    GetMsg
  499.     tst.l        d0
  500.     beq.s        Mainloop        ; no more msgs
  501.     
  502.     move.l        d0,a1
  503.     move.l        im_Class(a1),d2        ; Soort msg
  504.     move.l        im_IAddress(a1),a2    ; naar gadget
  505.     move.w        im_Code(a1),d3
  506.     move.w        im_Qualifier(a1),d4
  507.     CALLEXEC    ReplyMsg
  508.     
  509.     cmpi.l        #IDCMP_CLOSEWINDOW,d2    ; close gadget ?
  510.     beq.s        Quit
  511.     
  512.     cmpi.l        #IDCMP_GADGETUP,d2
  513.     beq        Gadgets
  514.     
  515.     cmpi.l        #IDCMP_GADGETDOWN,d2
  516.     beq        Slider
  517.  
  518.     cmpi.l        #IDCMP_ACTIVEWINDOW,d2
  519.     beq        ToFront
  520.  
  521.     cmpi.l        #IDCMP_NEWSIZE,d2
  522.     beq        Refresh
  523.  
  524.     cmpi.l        #IDCMP_VANILLAKEY,d2
  525.     beq        KeyBoard
  526.  
  527.     cmpi.l        #IDCMP_RAWKEY,d2
  528.     beq        KeyBoard2
  529.  
  530.     bra.s        Message
  531.  
  532. * Close down
  533.  
  534.  
  535. Quit    move.l        WindowPtr,a0
  536.     CALLINT        CloseWindow
  537.  
  538. NoWin    move.l        FakeBmSize,d0
  539.     move.l        FakeBmPtr,a1
  540.     CALLEXEC    FreeMem
  541. NoFakeBm
  542.     move.l        Font,a1
  543.     CALLGRAF    CloseFont
  544.  
  545. NoFont
  546. NoScLock
  547.     move.l        DataSize,d0
  548.     move.l        DataBuff,a1
  549.     CALLEXEC    FreeMem
  550.  
  551. NoDataFile
  552.     cmpi.l        #0,LangSize
  553.     beq.s        .skip
  554.     move.l        LangSize,d0
  555.     move.l        LangBuff,a1
  556.     CALLEXEC    FreeMem
  557. .skip
  558. NoLangFile
  559. NoGuruBeen
  560.     tst.b        tt_AutoMatic
  561.     beq.s        .skip
  562.  
  563.     clr.l        $100.w
  564.  
  565. .skip    cmpi.w        #36,Execvers
  566.     blt.s        .kickskip
  567.  
  568.     tst.l        ScreenLock
  569.     beq.s        .kickskip
  570.  
  571.     lea        0.w,a0
  572.     move.l        ScreenLock,a1
  573.     CALLINT        UnlockPubScreen
  574. .kickskip
  575.  
  576.     moveq        #120,d0
  577.     move.l        FakeRast,a1
  578.     CALLEXEC    FreeMem
  579. NoFRast
  580.     move.l        _DOSBase,a1
  581.     CALLEXEC    CloseLibrary
  582.  
  583. NoDos    move.l        _GfxBase,a1
  584.     CALLEXEC    CloseLibrary    
  585.  
  586. NoGfx    move.l        _IntuitionBase,a1
  587.     CALLEXEC    CloseLibrary
  588.     
  589. NoInt    moveq        #0,d0
  590.     rts
  591.  
  592. ** Keyboard handling
  593. KeyBoard
  594.     cmpi.b        #'>',d3
  595.     beq        KeyRight
  596.     cmpi.b        #'.',d3
  597.     beq        KeyRight
  598.     
  599.     cmpi.b        #'<',d3
  600.     beq        KeyLeft
  601.     cmpi.b        #',',d3
  602.     beq        KeyLeft
  603.     
  604.     cmpi.b        #9,d3
  605.     beq        KeySwitch
  606.  
  607.     cmpi.b        #'0',d3        0-9
  608.     blt.s        .skip1
  609.     cmpi.b        #'9',d3
  610.     bgt.s        .skip1
  611.     moveq        #0,d2    
  612.     sub.b        #'0',d3
  613.     addq.b        #1,d3
  614.     move.b        d3,d2
  615.     bra        PrGads
  616.  
  617. .skip1    cmpi.b        #'a',d3        Upper$
  618.     blt.s        .skip2
  619.     cmpi.b        #'z',d3
  620.     bgt.s        .skip2
  621.     moveq        #0,d2    
  622.     sub.b        #32,d3
  623.  
  624. .skip2    cmpi.b        #'A',d3        A-F
  625.     blt.s        .skip3
  626.     cmpi.b        #'F',d3
  627.     bgt.s        .skip3
  628.     moveq        #0,d2    
  629.     sub.b        #'A',d3
  630.     add.b        #11,d3
  631.     move.b        d3,d2
  632.     bra        PrGads
  633.  
  634. .skip3    cmpi.b        #13,d3        Enter = search
  635.     beq        KeyEnter
  636.  
  637.     lea        KeyGURU,a0
  638.     move.l        (a0),a0
  639.     move.b        (a0),d2
  640.     cmp.b        d2,d3
  641.     beq        Gadg23
  642.  
  643.     lea        KeyDEFAULT,a0
  644.     move.l        (a0),a0
  645.     move.b        (a0),d2
  646.     cmp.b        d2,d3
  647.     beq        Gadg26
  648.  
  649.     lea        KeyDOS,a0
  650.     move.l        (a0),a0
  651.     move.b        (a0),d2
  652.     cmp.b        d2,d3
  653.     beq        Gadg25
  654.  
  655.     lea        KeyLAST,a0
  656.     move.l        (a0),a0
  657.     move.b        (a0),d2
  658.     cmp.b        d2,d3
  659.     beq        Gadg24
  660.  
  661.     lea        KeyABOUT,a0
  662.     move.l        (a0),a0
  663.     move.b        (a0),d2
  664.     cmp.b        d2,d3
  665.     beq        Gadg28
  666.  
  667.     lea        KeyQUIT,a0
  668.     move.l        (a0),a0
  669.     move.b        (a0),d2
  670.     cmp.b        d2,d3
  671.     beq        Quit
  672.  
  673.     bra        Message
  674.  
  675.  
  676. KeyBoard2
  677.     cmpi.b        #78,d3
  678.     beq.s        KeyRight
  679.     
  680.     cmpi.b        #79,d3
  681.     beq.s        KeyLeft
  682.  
  683.     cmpi.b        #76,d3
  684.     beq.s        KeyUp
  685.  
  686.     cmpi.b        #77,d3
  687.     beq.s        KeyDown
  688.  
  689.     bra        Message
  690.     
  691.  
  692. KeyLeft
  693.     cmpi.b        #0,DosOffset        is guru display if true
  694.     beq        Gadg17
  695.     bra        Gadg19
  696.  
  697. KeyRight
  698.     cmpi.b        #0,DosOffset
  699.     beq        Gadg18
  700.     bra        Gadg20
  701.  
  702. KeySwitch
  703.     cmpi.b        #0,DosOffset
  704.     beq        Gadg22
  705.     bra        Gadg21
  706.  
  707. KeyEnter
  708.     cmpi.b        #0,DosOffset
  709.     beq        Gadg23
  710.     bra        Gadg25
  711.  
  712. KeyUp    bsr        ScrollUp
  713.     bra        Message
  714.  
  715. KeyDown    bsr        ScrollDown
  716.     bra        Message
  717.  
  718. ** Gadget handling (not slider!)
  719. Gadgets    move.w        gg_GadgetID(a2),d2    Which gadget
  720.     
  721. PrGads    cmpi.w        #0,d2
  722.     ble        Message
  723.  
  724.     cmpi.w        #17,d2
  725.     blt.s        NumGad        
  726.  
  727.  
  728.     cmpi.w        #17,d2
  729.     beq        Gadg17
  730.     cmpi.w        #18,d2
  731.     beq        Gadg18
  732.     cmpi.w        #19,d2
  733.     beq        Gadg19
  734.     cmpi.w        #20,d2
  735.     beq        Gadg20
  736.  
  737.     cmpi.w        #21,d2
  738.     beq        Gadg21
  739.     cmpi.w        #22,d2
  740.     beq        Gadg22
  741.  
  742.     cmpi.w        #23,d2
  743.     beq        Gadg23
  744.  
  745.     cmpi.w        #24,d2
  746.     beq        Gadg24
  747.     cmpi.w        #25,d2
  748.     beq        Gadg25
  749.     cmpi.w        #26,d2
  750.     beq        Gadg26
  751.  
  752.     cmpi.w        #27,d2
  753.     beq        Quit
  754.  
  755.     cmpi.w        #28,d2
  756.     beq        Gadg28
  757.  
  758.     bra        Message
  759.  
  760. NumGad    subq.w        #1,d2
  761.     cmpi.b        #0,GuruOffset
  762.     beq.s        .dosnum    
  763.  
  764.     cmpi.w        #10,d2
  765.     bge.s        .hexgad
  766.  
  767.     lea        GuruString,a0
  768.     moveq        #0,d0
  769.     move.b        GuruOffset,d0
  770.     subq.b        #1,d0
  771.     add.l        d0,a0
  772.  
  773.     move.b        #'0',d0
  774.     add.b        d2,d0
  775.     move.b        d0,(a0)
  776.     bra.s        Gadg18
  777.     
  778. .hexgad    sub.w        #10,d2
  779.     lea        GuruString,a0
  780.     moveq        #0,d0
  781.     move.b        GuruOffset,d0
  782.     subq.b        #1,d0
  783.     add.l        d0,a0
  784.  
  785.     move.b        #'A',d0
  786.     add.b        d2,d0
  787.     move.b        d0,(a0)
  788.     bra.s        Gadg18
  789.  
  790. .dosnum    lea        DosString,a0
  791.     moveq        #0,d0
  792.     move.b        DosOffset,d0
  793.     subq.b        #1,d0
  794.     add.l        d0,a0
  795.     cmpi.w        #9,d2
  796.     bgt        Message
  797.     
  798.     move.b        #'0',d0
  799.     add.b        d2,d0
  800.     move.b        d0,(a0)
  801.     bra.s        Gadg20
  802.     
  803. Gadg17    bsr        ActiGur
  804.     subq.b        #1,GuruOffset
  805.     cmpi.b        #0,GuruOffset
  806.     bne.s        .skip
  807.     move.b        #8,GuruOffset
  808. .skip    bsr        UpdGuru
  809.     bra        Message    
  810.  
  811. Gadg18    bsr.s        ActiGur
  812.     addq.b        #1,GuruOffset
  813.     cmpi.b        #9,GuruOffset
  814.     bne.s        .skip
  815.     move.b        #1,GuruOffset
  816. .skip    bsr        UpdGuru
  817.     bra        Message    
  818.  
  819. Gadg19    bsr        ActiDos
  820.     subq.b        #1,DosOffset
  821.     cmpi.b        #0,DosOffset
  822.     bne.s        .skip
  823.     move.b        #3,DosOffset
  824. .skip    bsr        UpdDos
  825.     bra        Message    
  826.  
  827. Gadg20    bsr.s        ActiDos
  828.     addq.b        #1,DosOffset
  829.     cmpi.b        #4,DosOffset
  830.     bne.s        .skip
  831.     move.b        #1,DosOffset
  832. .skip    bsr        UpdDos
  833.     bra        Message    
  834.  
  835.  
  836. Gadg21    bsr.s        ActiGur
  837.     bra        Message
  838.  
  839. ActiGur    cmpi.b        #0,GuruOffset
  840.     bne.s        .skip
  841.     move.b        DosOffset,DosOffsetTemp
  842.     move.b        GuruOffsetTemp,GuruOffset
  843.     move.b        #0,DosOffset
  844.     move.b        #0,GuruOffsetTemp
  845.     bsr        UpdGuru
  846.     bsr        UpdDos
  847. .skip    rts
  848.  
  849. Gadg22    bsr.s        ActiDos
  850.     bra        Message
  851.  
  852. ActiDos    cmpi.b        #0,DosOffset
  853.     bne.s        .skip
  854.     move.b        DosOffsetTemp,DosOffset
  855.     move.b        GuruOffset,GuruOffsetTemp
  856.     move.b        #0,DosOffsetTemp
  857.     move.b        #0,GuruOffset
  858.     bsr        UpdGuru
  859.     bsr        UpdDos
  860. .skip    rts
  861.  
  862. * retrieves last guru number from the system
  863. Gadg24    * take care ! ... this function works on the current
  864.     * line of amigas (tested upto 3.1)
  865.     * it reads a long on location $100 which is system private ...
  866.     * it may or may not continue to work in the future
  867.     
  868.     * it causes 1 enforcer hit , but don't worry
  869.     * they are only reads , so they won't hurt the system
  870.  
  871.     move.l        $100.w,d0        Enforcer...
  872.     move.l        d0,Temp
  873.  
  874.     lea        Temp,a0
  875.     lea        GuruString,a1
  876.     moveq        #3,d0
  877.  
  878. .loop    move.b        (a0)+,d1
  879.     move.b        d1,d2            
  880.     lsr.b        #4,d1
  881.  
  882.     andi.b        #$f,d1
  883.     andi.b        #$f,d2
  884.     
  885.     cmpi.b        #9,d1
  886.     ble.s        .norm1
  887.     addq.b        #7,d1
  888. .norm1    add.b        #'0',d1
  889.     move.b        d1,(a1)+
  890.  
  891.     cmpi.b        #9,d2
  892.     ble.s        .norm2
  893.     addq.b        #7,d2
  894. .norm2    add.b        #'0',d2
  895.     move.b        d2,(a1)+
  896.  
  897.     dbf        d0,.loop
  898.     
  899.     bsr        UpdGuru
  900.  
  901.     tst.b        tt_AutoMatic
  902.     bne        Gadg23
  903.  
  904.     bra        Message
  905.  
  906.  
  907. Gadg28    bsr        InitPrint
  908.     lea        AboutText,a0
  909.     bsr        Print
  910.     bsr        ResScr
  911.     bra        Message            
  912.  
  913.  
  914. Gadg26    moveq        #7,d0
  915.     lea        GuruString,a0
  916. .loop1    move.b        #'0',(a0)+
  917.     dbf        d0,.loop1
  918.  
  919.     moveq        #2,d0
  920.     lea        DosString,a0
  921. .loop2    move.b        #'0',(a0)+
  922.     dbf        d0,.loop2
  923.     
  924.     move.b        #1,GuruOffset
  925.     move.b        #0,GuruOffsetTemp
  926.     move.b        #0,DosOffset
  927.     move.b        #1,DosOffsetTemp
  928.  
  929.     bsr        DrawLogo
  930.     bsr        UpdGuru
  931.     bsr        UpdDos
  932.     bra        Message
  933.  
  934. Gadg25    ** Search for DOS errors
  935.     bsr        ActiDos
  936.     bsr        InitPrint
  937.     
  938.     lea        DosString,a0
  939.     lea        DosStringTemp,a1
  940.     move.b        (a0)+,(a1)+
  941.     move.b        (a0)+,(a1)+
  942.     move.b        (a0)+,(a1)+
  943.     
  944.     lea        SDosString,a0
  945.     move.l        DosAlert,a1
  946.     move.l        EndOfFile,a2
  947.     bsr        Search
  948.     move.l        a0,d0
  949.     cmpi.l        #0,d0
  950.     beq.s        .notfound    
  951.     bsr        Print
  952.     bsr        ResScr
  953.     bra        Message
  954.     
  955. .notfound
  956.     move.l        UnknownDos,a0
  957.     bsr        Print        
  958.     bsr        ResScr
  959.     bra        Message
  960.     
  961. Gadg23    ** Search for GURU errors
  962.     bsr        ActiGur
  963.     bsr        InitPrint
  964.     
  965.     lea        GuruString,a0
  966.     lea        GuruStringTemp,a1
  967.     lea        SHeaderString,a2
  968.  
  969.     moveq        #7,d0
  970. .loop    move.b        (a0)+,d1
  971.     move.b        d1,(a1)+
  972.     move.b        d1,(a2)+
  973.     dbf        d0,.loop
  974.  
  975.     lea        SGuruHeader,a0
  976.     bsr        Print
  977.  
  978.     move.b        #0,FoundErr
  979.     lea        GuruStringTemp,a1
  980.     move.b        (a1),d0
  981.     cmpi.b        #'@',d0
  982.     blt.s        .nohex
  983.     subi.b        #7,d0
  984. .nohex    subi.b        #'0',d0
  985.     move.b        d0,d1
  986.     btst        #3,d1
  987.     beq.s        .skippie
  988.     move.b        #1,FoundErr    
  989. .skippie
  990.     and.b        #$7,d1
  991.     add.b        #'0',d1
  992.     move.b        d1,(a1)
  993.  
  994.     cmpi.b        #1,FoundErr
  995.     beq.s        .skip
  996.     move.l        Recovery,a0
  997.     bsr        Print
  998.     bra.s        .startsearch
  999. .skip    move.l        Deadend,a0
  1000.     bsr        Print
  1001.  
  1002. .startsearch
  1003.     move.b        #0,FoundErr
  1004.     lea        SGuruString,a0
  1005.     move.l        GeneralAlert,a1
  1006.     move.l        Subsys1,a2
  1007.     bsr        Search
  1008.  
  1009.     move.l        a0,d0
  1010.     cmpi.l        #0,d0
  1011.     beq.s        .notfound    
  1012.     bsr        Print
  1013.     bsr        ResScr
  1014.     bra        Message
  1015.     
  1016. .notfound
  1017.     lea        GuruStringTemp,a1
  1018.     addq.l        #2,a1
  1019.     moveq        #5,d0
  1020. .ss1    move.b        #'0',(a1)+
  1021.     dbf        d0,.ss1
  1022.     
  1023.     lea        SGuruString,a0
  1024.     move.l        Subsys1,a1
  1025.     move.l        Subsys2,a2
  1026.     bsr        Search
  1027.  
  1028.     move.l        a0,d0
  1029.     cmpi.l        #0,d0
  1030.     beq.s        .notfound2    
  1031.     bsr        Print
  1032.     move.b        #1,FoundErr
  1033.  
  1034. .notfound2
  1035.     lea        GuruStringTemp,a1
  1036.     moveq        #7,d0
  1037. .ss2    move.b        #'0',(a1)+
  1038.     dbf        d0,.ss2
  1039.     
  1040.     lea        GuruString,a0
  1041.     lea        GuruStringTemp,a1
  1042.     addq.l        #2,a0
  1043.     addq.l        #2,a1
  1044.     move.b        (a0)+,(a1)+
  1045.     move.b        (a0)+,(a1)+
  1046.  
  1047.     lea        SGuruString,a0
  1048.     move.l        Subsys2,a1
  1049.     move.l        Subsys3,a2
  1050.     bsr        Search
  1051.  
  1052.     move.l        a0,d0
  1053.     cmpi.l        #0,d0
  1054.     beq.s        .notfound3    
  1055.     bsr        Print
  1056.     move.b        #1,FoundErr
  1057.  
  1058. .notfound3
  1059.     lea        GuruStringTemp,a1
  1060.     moveq        #7,d0
  1061. .ss3    move.b        #'0',(a1)+
  1062.     dbf        d0,.ss3
  1063.     
  1064.     lea        GuruString,a0
  1065.     lea        GuruStringTemp,a1
  1066.     addq.l        #4,a0
  1067.     addq.l        #4,a1
  1068.     move.b        (a0)+,(a1)+
  1069.     move.b        (a0)+,(a1)+
  1070.     move.b        (a0)+,(a1)+
  1071.     move.b        (a0)+,(a1)+
  1072.  
  1073.     lea        SGuruString,a0
  1074.     move.l        Subsys3,a1
  1075.     move.l        DosAlert,a2
  1076.     bsr        Search
  1077.  
  1078.     move.l        a0,d0
  1079.     cmpi.l        #0,d0
  1080.     beq.s        .notfound4    
  1081.     bsr.s        Print
  1082.     move.b        #1,FoundErr
  1083.  
  1084. .notfound4
  1085.     bsr        ResScr
  1086.     
  1087.     cmpi.b        #1,FoundErr
  1088.     beq        Message
  1089.  
  1090.     move.l        UnknownGuru,a0
  1091.     bsr.s        Print        
  1092.     bsr        ResScr
  1093.     bra        Message
  1094.     
  1095. * Pop window to front
  1096.  
  1097. ToFront    cmpi.b        #1,tt_AutoFront
  1098.     bne        Message
  1099.     move.l        WindowPtr,a0
  1100.     CALLINT        WindowToFront
  1101.     bra        Message
  1102.  
  1103. * Prints a node in the main window. Inputs a0 points to BEGIN of node (@NODE...)
  1104. * Na printen bsr ResScr
  1105. Print    move.l        a0,a5
  1106.     lea        EndNode,a0
  1107.     move.l        a5,a1
  1108.     move.l        a1,a2
  1109.     lea        3000(a2),a2    Search 3 K
  1110.     bsr        Search
  1111.     move.l        a0,d0
  1112.     cmpi.l        #0,d0
  1113.     beq.s        PrintError
  1114.     move.l        a0,d6        
  1115.  
  1116. .loop1    move.b        (a5)+,d0
  1117.     cmpi.b        #')',d0
  1118.     bne.s        .loop1
  1119.     
  1120.     move.l        a5,d5
  1121.     sub.l        d5,d6        Length of node text
  1122.     cmpi.l        #2560,d6
  1123.     bge.s        PrintError
  1124.  
  1125.     subq.l        #1,d6
  1126.     move.l        a5,a0
  1127.     lea        TempPrintBuff,a1    
  1128.  
  1129. .copyloop
  1130.     move.b        (a0)+,d0
  1131.     cmpi.b        #1,d0
  1132.     beq.s        .skip
  1133.     move.b        d0,(a1)+
  1134. .skip    dbf        d6,.copyloop
  1135.     move.b        #0,(a1)+
  1136.  
  1137.     bsr.s        ActualPrint
  1138.     rts
  1139.     
  1140. PrintError
  1141.     rts    
  1142.     
  1143. ActualPrint
  1144.     lea        TempPrintBuff,a5
  1145.  
  1146.     moveq        #1,d0
  1147.     move.l        FakeRast,a1
  1148.     CALLGRAF    SetAPen
  1149.     
  1150. .dloop    moveq        #0,d0
  1151.     moveq        #0,d1
  1152.     move.w        CursY,d1
  1153.     move.l        FakeRast,a1
  1154.     CALLGRAF    Move
  1155.     move.b        #0,Corrected
  1156.  
  1157.     moveq        #0,d4
  1158.     move.l        a5,a4    
  1159. .lengthloop
  1160.     move.b        (a4)+,d0
  1161.     addq.l        #1,d4
  1162.     
  1163.     cmpi.b        #10,d0
  1164.     beq        .maybelast10
  1165.  
  1166.     cmpi.b        #0,d0
  1167.     beq        .maybelast0
  1168.     bra.s        .lengthloop
  1169.  
  1170. .ret    move.l        FakeRast,a1
  1171.     move.l        a5,a0
  1172.     move.l        d4,d0
  1173.     CALLGRAF    TextLength
  1174.     move.l        DisplayWidth,d1
  1175.     cmp.l        d1,d0
  1176.     ble.s        .drukken
  1177.     
  1178. .wordback
  1179.     move.b        #1,Corrected
  1180.     subq.l        #1,a4
  1181.     subq.l        #1,d4
  1182.     cmpi.b        #' ',(a4)
  1183.     beq.s        .ret
  1184.     bra.s        .wordback
  1185.     
  1186. .drukken
  1187.     move.l        FakeRast,a1
  1188.     move.l        a5,a0
  1189.     move.l        d4,d0
  1190.     move.l        a4,a5
  1191.     CALLGRAF    Text
  1192.     cmpi.b        #1,Corrected
  1193.     bne.s        .skp
  1194.     move.w        FontY,d1
  1195.     add.w        d1,CursY
  1196.  
  1197.     moveq        #0,d0
  1198.     moveq        #0,d1
  1199.     move.w        CursY,d1
  1200.     move.w        FontY,d0
  1201.     mulu.w        #32,d0
  1202.     cmp.w        d0,d1
  1203.     bge.s        .oflo    
  1204.  
  1205. .skp    bra        .dloop                    
  1206.     
  1207. .maybelast10
  1208.     cmpi.l        #1,d4
  1209.     bne.s        .notlast
  1210.  
  1211.     move.w        FontY,d1
  1212.     add.w        d1,CursY
  1213.  
  1214.     moveq        #0,d0
  1215.     moveq        #0,d1
  1216.     move.w        CursY,d1
  1217.     move.w        FontY,d0
  1218.     mulu.w        #32,d0
  1219.     cmp.w        d0,d1
  1220.     bge.s        .oflo    
  1221.  
  1222.     move.l        a4,a5
  1223.     bra        .dloop
  1224.  
  1225. .maybelast0
  1226.     cmpi.l        #1,d4
  1227.     bne.s        .notlast
  1228.     rts
  1229.  
  1230. .notlast
  1231.     subq.l        #1,a4
  1232.     subq.l        #1,d4
  1233.     bra        .ret
  1234.         
  1235. .oflo    rts
  1236.  
  1237. InitPrint
  1238.     bsr        ClrScr
  1239.     move.w        FontBase,d0
  1240.     move.w        d0,CursY
  1241.     rts
  1242.     
  1243. ** Routines, subs and other useful stuff
  1244.  
  1245. NoDATAErr
  1246.     move.l        ErrDTXT,a0
  1247.     move.l        ErrDRTXT,a1
  1248.     lea        0.w,a3
  1249.     bsr        Req
  1250.  
  1251.     cmpi.l        #0,ScreenLock
  1252.     bne.s        .skip
  1253.  
  1254.     lea        0.w,a0
  1255.     move.l        ScreenLock,a1
  1256.     CALLINT        UnlockPubScreen
  1257.  
  1258. .skip    bra        NoDataFile
  1259.  
  1260. ErrInDATAErr
  1261.     move.l        ErrInDTXT,a0
  1262.     move.l        ErrInDRTXT,a1
  1263.     lea        0.w,a3
  1264.     bsr.s        Req
  1265.  
  1266.     cmpi.l        #0,ScreenLock
  1267.     bne.s        .skip
  1268.  
  1269.     lea        0.w,a0
  1270.     move.l        ScreenLock,a1
  1271.     CALLINT        UnlockPubScreen
  1272.  
  1273. .skip    bra        NoScLock
  1274.  
  1275.  
  1276. DecodeLF
  1277.     move.l        LangSize,d0
  1278.     subq.l        #1,d0
  1279.     move.l        LangBuff,a0
  1280.     lea        IDTXT,a1
  1281.     move.l        a0,(a1)+
  1282. .loop    move.b        (a0)+,d1
  1283.     cmpi.b        #10,d1
  1284.     bne.s        .skip
  1285.     move.b        #0,-1(a0)
  1286.     move.l        a0,(a1)+
  1287. .skip    dbf        d0,.loop
  1288.     rts
  1289.  
  1290.  
  1291. * Put up a requester, a0 points to string, a1 to answer string
  1292. *                     a3 points to args
  1293. * Returns with d0=result
  1294. Req    cmpi.w        #36,Execvers
  1295.     blt.s        .kickskip
  1296.  
  1297.     move.l        a0,ReqBody
  1298.     move.l        a1,ReqGad
  1299.  
  1300.     move.l        WindowPtr,a0        screen
  1301.     lea        ReqStruct,a1        Request struct
  1302.     move.w        #0,a2            No shared IDCMP
  1303.     CALLINT        EasyRequestArgs
  1304. .kickskip
  1305.     rts
  1306.  
  1307. * Get the length of a string in pixels
  1308. * Input: a0 -> string
  1309. * Output: d0 -> PixelLength 
  1310. TextLength
  1311.     moveq        #0,d1
  1312.     move.l        a0,a1
  1313. .loop    addq.l        #1,d1
  1314.     move.b        (a0)+,d0
  1315.     cmpi.b        #0,d0
  1316.     bne.s        .loop
  1317.     subq.l        #1,d1
  1318.     
  1319.     move.l        d1,d0
  1320.     move.l        a1,a0
  1321.     move.l        FakeRast,a1
  1322.     CALLGRAF    TextLength
  1323.     rts    
  1324.  
  1325. * Find widest bit of text
  1326. WidestText
  1327.     moveq        #0,d5
  1328.     lea        SetTXT,a5
  1329.     moveq        #6,d4
  1330. .loop    move.l        (a5)+,a0
  1331.     bsr.s        TextLength
  1332.     cmp.l        d5,d0
  1333.     ble.s        .skip
  1334.     move.l        d0,d5
  1335. .skip    dbf        d4,.loop
  1336.     move.l        d5,Widest
  1337.     rts    
  1338.  
  1339. * Find widest letter
  1340. WidestLetter
  1341.     moveq        #0,d5
  1342.     lea        Letters,a5
  1343.     moveq        #15,d4
  1344. .loop    move.l        a5,a0        
  1345.  
  1346.     moveq        #1,d0
  1347.     move.l        FakeRast,a1
  1348.     CALLGRAF    TextLength
  1349.     addq.l        #1,a5
  1350.  
  1351.     cmp.l        d5,d0
  1352.     ble.s        .skip
  1353.     move.l        d0,d5
  1354. .skip    dbf        d4,.loop
  1355.     move.l        d5,WidLett
  1356.     rts    
  1357.  
  1358. * Find widest arrow
  1359. WidestArrow
  1360.     moveq        #0,d5
  1361.     lea        Arrows,a5
  1362.     moveq        #1,d4
  1363. .loop    move.l        a5,a0        
  1364.  
  1365.     moveq        #1,d0
  1366.     move.l        FakeRast,a1
  1367.     CALLGRAF    TextLength
  1368.     addq.l        #1,a5
  1369.  
  1370.     cmp.l        d5,d0
  1371.     ble.s        .skip
  1372.     move.l        d0,d5
  1373. .skip    dbf        d4,.loop
  1374.     move.l        d5,WidArrow
  1375.     rts    
  1376.  
  1377.  
  1378. * Set gadget borders
  1379. DoBorders
  1380.     lea        SmallBrdDat,a0
  1381.     lea        SmallBrdDat2,a1
  1382.     
  1383.     move.l        WidLett,d0
  1384.     addq.w        #6,d0            d0=2+width+inh
  1385.     
  1386.     move.w        d0,(a0)
  1387.     move.w        d0,12(a1)
  1388.     move.w        d0,16(a1)
  1389.     
  1390.     addq.w        #1,d0            d0=3+width+inh
  1391.     move.w        d0,4(a1)
  1392.     move.w        d0,8(a1)
  1393.     
  1394.     moveq        #0,d0    
  1395.     move.w        FontY,d0
  1396.     addq.w        #2,d0            d0=high
  1397.     
  1398.     move.w        d0,18(a0)
  1399.     move.w        d0,14(a1)
  1400.     
  1401.     addq.w        #1,d0            d0=high+1
  1402.     move.w        d0,10(a0)
  1403.     move.w        d0,2(a1)
  1404.     move.w        d0,6(a1)
  1405.  
  1406.     lea        MediumBrdDat,a0
  1407.     lea        MediumBrdDat2,a1
  1408.     
  1409.     move.l        WidArrow,d0
  1410.     addq.w        #6,d0            d0=2+width+inh
  1411.     
  1412.     move.w        d0,(a0)
  1413.     move.w        d0,12(a1)
  1414.     move.w        d0,16(a1)
  1415.     
  1416.     addq.w        #1,d0            d0=3+width+inh
  1417.     move.w        d0,4(a1)
  1418.     move.w        d0,8(a1)
  1419.     
  1420.     moveq        #0,d0    
  1421.     move.w        FontY,d0
  1422.     addq.w        #2,d0            d0=high
  1423.     
  1424.     move.w        d0,18(a0)
  1425.     move.w        d0,14(a1)
  1426.     
  1427.     addq.w        #1,d0            d0=high+1
  1428.     move.w        d0,10(a0)
  1429.     move.w        d0,2(a1)
  1430.     move.w        d0,6(a1)
  1431.  
  1432.  
  1433.     move.l        SetTXT,a0
  1434.     bsr        TextLength
  1435.     andi.l         #$0000FFFF,d0
  1436.     
  1437.     lea        SetBrdDat,a0
  1438.     lea        SetBrdDat2,a1
  1439.     
  1440.     addq.w        #6,d0            d0=2+width+inh
  1441.     
  1442.     move.w        d0,(a0)
  1443.     move.w        d0,12(a1)
  1444.     move.w        d0,16(a1)
  1445.     
  1446.     addq.w        #1,d0            d0=3+width+inh
  1447.     move.w        d0,4(a1)
  1448.     move.w        d0,8(a1)
  1449.     
  1450.     moveq        #0,d0    
  1451.     move.w        FontY,d0
  1452.     addq.w        #2,d0            d0=high
  1453.     
  1454.     move.w        d0,18(a0)
  1455.     move.w        d0,14(a1)
  1456.     
  1457.     addq.w        #1,d0            d0=high+1
  1458.     move.w        d0,10(a0)
  1459.     move.w        d0,2(a1)
  1460.     move.w        d0,6(a1)
  1461.  
  1462.     lea        BigBrdDat,a0
  1463.     lea        BigBrdDat2,a1
  1464.     
  1465.     move.l        Widest,d0
  1466.     addq.w        #6,d0            d0=2+width+inh
  1467.     
  1468.     move.w        d0,(a0)
  1469.     move.w        d0,12(a1)
  1470.     move.w        d0,16(a1)
  1471.     
  1472.     addq.w        #1,d0            d0=3+width+inh
  1473.     move.w        d0,4(a1)
  1474.     move.w        d0,8(a1)
  1475.     
  1476.     moveq        #0,d0    
  1477.     move.w        FontY,d0
  1478.     addq.w        #2,d0            d0=high
  1479.     
  1480.     move.w        d0,18(a0)
  1481.     move.w        d0,14(a1)
  1482.     
  1483.     addq.w        #1,d0            d0=high+1
  1484.     move.w        d0,10(a0)
  1485.     move.w        d0,2(a1)
  1486.     move.w        d0,6(a1)
  1487.  
  1488.     lea        DispBrdDat,a0
  1489.     lea        DispBrdDat2,a1
  1490.     
  1491.     move.l        Widest,d0
  1492.     add.w        #30,d0            d0=2+width+inh
  1493.     move.l        WidLett,d1
  1494.     mulu.w        #2,d1
  1495.     add.w        d1,d0
  1496.  
  1497.     move.w        d0,(a0)
  1498.     move.w        d0,12(a1)
  1499.     move.w        d0,16(a1)
  1500.     
  1501.     addq.w        #1,d0            d0=3+width+inh
  1502.     move.w        d0,4(a1)
  1503.     move.w        d0,8(a1)
  1504.     
  1505.     moveq        #0,d0    
  1506.     move.w        FontY,d0
  1507.     addq.w        #2,d0            d0=high
  1508.     
  1509.     move.w        d0,18(a0)
  1510.     move.w        d0,14(a1)
  1511.     
  1512.     addq.w        #1,d0            d0=high+1
  1513.     move.w        d0,10(a0)
  1514.     move.w        d0,2(a1)
  1515.     move.w        d0,6(a1)
  1516.  
  1517.     lea        MainBrdDat,a0
  1518.     lea        MainBrdDat2,a1
  1519.     
  1520.     move.l        WindowWidth,d0
  1521.     subq.w        #6,d0            d0=winwidth-something
  1522.  
  1523.     move.w        d0,(a0)
  1524.     move.w        d0,12(a1)
  1525.     move.w        d0,16(a1)
  1526.     
  1527.     addq.w        #1,d0            
  1528.     move.w        d0,4(a1)
  1529.     move.w        d0,8(a1)
  1530.     
  1531.     moveq        #0,d0    
  1532.     move.w        FontY,d0
  1533.     mulu.w        #8,d0
  1534.     addq.w        #4,d0            d0=high
  1535.     
  1536.     move.w        d0,18(a0)
  1537.     move.w        d0,14(a1)
  1538.     
  1539.     addq.w        #1,d0            d0=high+1
  1540.     move.w        d0,10(a0)
  1541.     move.w        d0,2(a1)
  1542.     move.w        d0,6(a1)
  1543.     rts    
  1544.  
  1545. * Set gadget widths and heights
  1546. DoWidths
  1547.     move.l        WidLett,d0
  1548.     addq.w        #8,d0
  1549.     moveq        #0,d1
  1550.     move.w        FontY,d1
  1551.     addq.w        #4,d1
  1552.  
  1553.     moveq        #15,d2
  1554.     lea        Gad01,a0
  1555. .loop    move.w        d0,gg_Width(a0)
  1556.     move.w        d1,gg_Height(a0)
  1557.     
  1558.     move.l        (a0),a0            gg_NextGadget
  1559.     dbf        d2,.loop
  1560.  
  1561. Arrows    move.l        WidArrow,d0
  1562.     addq.w        #8,d0
  1563.     moveq        #0,d1
  1564.     move.w        FontY,d1
  1565.     addq.w        #4,d1
  1566.  
  1567.     moveq        #3,d2
  1568.     lea        Gad17,a0
  1569. .loop    move.w        d0,gg_Width(a0)
  1570.     move.w        d1,gg_Height(a0)
  1571.     
  1572.     move.l        (a0),a0            gg_NextGadget
  1573.     dbf        d2,.loop
  1574.  
  1575. Sets    move.l        SetTXT,a0
  1576.     bsr        TextLength
  1577.     andi.l         #$0000FFFF,d0
  1578.     addq.w        #8,d0
  1579.     moveq        #0,d1
  1580.     move.w        FontY,d1
  1581.     addq.w        #4,d1
  1582.  
  1583.     moveq        #1,d2
  1584.     lea        Gad21,a0
  1585. .loop    move.w        d0,gg_Width(a0)
  1586.     move.w        d1,gg_Height(a0)
  1587.     
  1588.     move.l        (a0),a0            gg_NextGadget
  1589.     dbf        d2,.loop
  1590.  
  1591. Bigs    move.l        Widest,d0
  1592.     addq.w        #8,d0
  1593.     moveq        #0,d1
  1594.     move.w        FontY,d1
  1595.     addq.w        #4,d1
  1596.  
  1597.     moveq        #5,d2
  1598.     lea        Gad23,a0
  1599. .loop    move.w        d0,gg_Width(a0)
  1600.     move.w        d1,gg_Height(a0)
  1601.     
  1602.     move.l        (a0),a0            gg_NextGadget
  1603.     dbf        d2,.loop
  1604.     rts                    
  1605.  
  1606. * Set gadget positions
  1607. DoPositions
  1608.     moveq        #2,d0
  1609.     lea        Gad21,a0
  1610.     move.w        d0,gg_LeftEdge(a0)
  1611.     lea        Gad23,a0
  1612.     move.w        d0,gg_LeftEdge(a0)
  1613.     lea        Gad24,a0
  1614.     move.w        d0,gg_LeftEdge(a0)
  1615.     add.w        #14,d0
  1616.     add.l        Widest,d0        X1=breedstetekst+12
  1617.     lea        Gad13,a0
  1618.     move.w        d0,gg_LeftEdge(a0)
  1619.     lea        Gad09,a0
  1620.     move.w        d0,gg_LeftEdge(a0)
  1621.     lea        Gad05,a0
  1622.     move.w        d0,gg_LeftEdge(a0)
  1623.     lea        Gad01,a0
  1624.     move.w        d0,gg_LeftEdge(a0)
  1625.     add.w        #10,d0
  1626.     add.l        WidLett,d0        X2=x1+breedsteletter+10
  1627.     lea        Gad14,a0
  1628.     move.w        d0,gg_LeftEdge(a0)
  1629.     lea        Gad10,a0
  1630.     move.w        d0,gg_LeftEdge(a0)
  1631.     lea        Gad06,a0
  1632.     move.w        d0,gg_LeftEdge(a0)
  1633.     lea        Gad02,a0
  1634.     move.w        d0,gg_LeftEdge(a0)
  1635.     add.w        #10,d0
  1636.     add.l        WidLett,d0
  1637.     lea        Gad15,a0
  1638.     move.w        d0,gg_LeftEdge(a0)
  1639.     lea        Gad11,a0
  1640.     move.w        d0,gg_LeftEdge(a0)
  1641.     lea        Gad07,a0
  1642.     move.w        d0,gg_LeftEdge(a0)
  1643.     lea        Gad03,a0
  1644.     move.w        d0,gg_LeftEdge(a0)
  1645.     add.w        #10,d0
  1646.     add.l        WidLett,d0
  1647.     lea        Gad16,a0
  1648.     move.w        d0,gg_LeftEdge(a0)
  1649.     lea        Gad12,a0
  1650.     move.w        d0,gg_LeftEdge(a0)
  1651.     lea        Gad08,a0
  1652.     move.w        d0,gg_LeftEdge(a0)
  1653.     lea        Gad04,a0
  1654.     move.w        d0,gg_LeftEdge(a0)
  1655.     add.w        #14,d0
  1656.     add.l        WidLett,d0
  1657.     lea        Gad19,a0
  1658.     move.w        d0,gg_LeftEdge(a0)
  1659.     lea        Gad25,a0
  1660.     move.w        d0,gg_LeftEdge(a0)
  1661.     lea        Gad26,a0
  1662.     move.w        d0,gg_LeftEdge(a0)
  1663.     add.w        #14,d0
  1664.     add.l        Widest,d0
  1665.     lea        Gad27,a0
  1666.     move.w        d0,gg_LeftEdge(a0)
  1667.     lea        Gad28,a0
  1668.     move.w        d0,gg_LeftEdge(a0)
  1669.  
  1670.  
  1671.     moveq        #0,d0
  1672.     move.w        FontY,d0
  1673.     mulu.w        #8,d0    
  1674.     add.w        #10,d0
  1675.     lea        Gad27,a0
  1676.     move.w        d0,gg_TopEdge(a0)
  1677.     add.w        FontY,d0
  1678.     addq.w        #5,d0
  1679.     lea        Gad13,a0
  1680.     move.w        d0,gg_TopEdge(a0)
  1681.     lea        Gad14,a0
  1682.     move.w        d0,gg_TopEdge(a0)
  1683.     lea        Gad15,a0
  1684.     move.w        d0,gg_TopEdge(a0)
  1685.     lea        Gad16,a0
  1686.     move.w        d0,gg_TopEdge(a0)
  1687.     lea        Gad21,a0
  1688.     move.w        d0,gg_TopEdge(a0)
  1689.     lea        Gad22,a0
  1690.     move.w        d0,gg_TopEdge(a0)
  1691.     add.w        FontY,d0
  1692.     addq.w        #5,d0
  1693.     lea        Gad09,a0
  1694.     move.w        d0,gg_TopEdge(a0)
  1695.     lea        Gad10,a0
  1696.     move.w        d0,gg_TopEdge(a0)
  1697.     lea        Gad11,a0
  1698.     move.w        d0,gg_TopEdge(a0)
  1699.     lea        Gad12,a0
  1700.     move.w        d0,gg_TopEdge(a0)
  1701.     lea        Gad17,a0
  1702.     move.w        d0,gg_TopEdge(a0)
  1703.     lea        Gad18,a0
  1704.     move.w        d0,gg_TopEdge(a0)
  1705.     lea        Gad19,a0
  1706.     move.w        d0,gg_TopEdge(a0)
  1707.     lea        Gad20,a0
  1708.     move.w        d0,gg_TopEdge(a0)
  1709.     add.w        FontY,d0
  1710.     addq.w        #5,d0
  1711.     lea        Gad05,a0
  1712.     move.w        d0,gg_TopEdge(a0)
  1713.     lea        Gad06,a0
  1714.     move.w        d0,gg_TopEdge(a0)
  1715.     lea        Gad07,a0
  1716.     move.w        d0,gg_TopEdge(a0)
  1717.     lea        Gad08,a0
  1718.     move.w        d0,gg_TopEdge(a0)
  1719.     lea        Gad23,a0
  1720.     move.w        d0,gg_TopEdge(a0)
  1721.     lea        Gad25,a0
  1722.     move.w        d0,gg_TopEdge(a0)
  1723.     add.w        FontY,d0
  1724.     addq.w        #5,d0
  1725.     lea        Gad01,a0
  1726.     move.w        d0,gg_TopEdge(a0)
  1727.     lea        Gad02,a0
  1728.     move.w        d0,gg_TopEdge(a0)
  1729.     lea        Gad03,a0
  1730.     move.w        d0,gg_TopEdge(a0)
  1731.     lea        Gad04,a0
  1732.     move.w        d0,gg_TopEdge(a0)
  1733.     lea        Gad24,a0
  1734.     move.w        d0,gg_TopEdge(a0)
  1735.     lea        Gad26,a0
  1736.     move.w        d0,gg_TopEdge(a0)
  1737.     lea        Gad28,a0
  1738.     move.w        d0,gg_TopEdge(a0)
  1739.  
  1740.     lea        Gad19,a0
  1741.     move.w        gg_LeftEdge(a0),d1
  1742.     move.w        gg_Width(a0),d0
  1743.     add.w        d1,d0
  1744.     addq.w        #2,d0
  1745.     lea        Gad20,a0
  1746.     move.w        d0,gg_LeftEdge(a0)
  1747.  
  1748.     lea        Gad09,a0
  1749.     move.w        gg_LeftEdge(a0),d0
  1750.     lea        Gad18,a0
  1751.     move.w        gg_Width(a0),d1
  1752.     sub.w        d1,d0
  1753.     subq.w        #6,d0
  1754.     move.w        d0,gg_LeftEdge(a0)
  1755.     lea        Gad17,a0
  1756.     sub.w        d1,d0
  1757.     subq.w        #2,d0
  1758.     move.w        d0,gg_LeftEdge(a0)
  1759.  
  1760.     lea        Gad27,a0
  1761.     move.w        gg_LeftEdge(a0),d0
  1762.     lea        Gad22,a0
  1763.     move.w        gg_Width(a0),d1
  1764.     sub.w        d1,d0
  1765.     subq.w        #6,d0
  1766.     move.w        d0,gg_LeftEdge(a0)
  1767.  
  1768.     lea        WinGads,a0
  1769.  
  1770. .loop    move.w        gg_TopEdge(a0),d0
  1771.     add.w        TopBorder,d0
  1772.     move.w        d0,gg_TopEdge(a0)
  1773.     move.w        gg_LeftEdge(a0),d0
  1774.     add.w        LeftBorder,d0
  1775.     move.w        d0,gg_LeftEdge(a0)
  1776.  
  1777.     move.l        (a0),d0
  1778.     cmpi.l        #0,d0
  1779.     beq.s        .done
  1780.     move.l        (a0),a0                gg_NextGadget
  1781.     bra.s        .loop
  1782.         
  1783. .done    rts
  1784.  
  1785. * Center gadget text
  1786. CenterText
  1787.     lea        WinGads,a0
  1788.  
  1789. .loop    move.l        a0,a5
  1790.     move.l        gg_GadgetText(a0),a1
  1791.  
  1792.     cmpi.b        #1,tt_Topaz
  1793.     bne.s        .skip
  1794.     lea        Topaz,a6
  1795.     move.l        a6,it_ITextFont(a1)
  1796.  
  1797. .skip    move.l        it_IText(a1),a0
  1798.     bsr        TextLength
  1799.     andi.l         #$0000FFFF,d0
  1800.     divu.w        #2,d0
  1801.     move.l        d0,d3                d3=halve breedte
  1802.     
  1803.     move.w        FontY,d0
  1804.     andi.l         #$0000FFFF,d0
  1805.     divu.w        #2,d0
  1806.     move.l        d0,d4                d4=halve hoogte    
  1807.     
  1808.     move.l        a5,a0
  1809.     moveq        #0,d0
  1810.     moveq        #0,d1
  1811.     move.w        gg_Width(a0),d0
  1812.     move.w        gg_Height(a0),d1
  1813.     divu.w        #2,d0
  1814.     divu.w        #2,d1
  1815.  
  1816.     sub.w        d3,d0
  1817.     sub.w        d4,d1
  1818.  
  1819.     move.l        gg_GadgetText(a0),a1
  1820.     move.w        d0,it_LeftEdge(a1)
  1821.     move.w        d1,it_TopEdge(a1)    
  1822.         
  1823.     move.l        (a0),d0
  1824.     cmpi.l        #0,d0
  1825.     beq.s        .done
  1826.     move.l        (a0),a0                gg_NextGadget
  1827.     bra.s        .loop
  1828.         
  1829. .done    rts
  1830.  
  1831. * Set text of gadgets
  1832. InsertText
  1833.     lea        Gad21Txt,a0
  1834.     move.l        SetTXT,it_IText(a0)
  1835.  
  1836.     lea        Gad23Txt,a0
  1837.     move.l        GuruTXT,it_IText(a0)
  1838.     lea        Gad24Txt,a0
  1839.     move.l        LastTXT,it_IText(a0)
  1840.     lea        Gad25Txt,a0
  1841.     move.l        DosTXT,it_IText(a0)
  1842.     lea        Gad26Txt,a0
  1843.     move.l        DefaultTXT,it_IText(a0)
  1844.     lea        Gad27Txt,a0
  1845.     move.l        QuitTXT,it_IText(a0)
  1846.     lea        Gad28Txt,a0
  1847.     move.l        InfoTXT,it_IText(a0)
  1848.     rts
  1849.  
  1850. * Refresh window on a resize
  1851. Refresh
  1852.     move.l        WindowPtr,a0        Window sized bigger ?
  1853.     move.w        wd_Width(a0),d0
  1854.     andi.l         #$0000FFFF,d0
  1855.     cmp.l        WindowWidth,d0
  1856.     blt        Message
  1857.     bsr.s        SubRefresh
  1858.     bra        Message
  1859.  
  1860. SubRefresh
  1861.     moveq        #0,d0
  1862.     move.b        DarkPen,d0
  1863.     move.l        WindowRastPort,a1
  1864.     CALLGRAF    SetAPen
  1865.     lea        Gad27,a5
  1866.     move.w        gg_LeftEdge(a5),d0
  1867.     move.w        gg_TopEdge(a5),d1
  1868.     subq.w        #4,d0
  1869.     move.l        WindowRastPort,a1
  1870.     CALLGRAF    Move
  1871.     lea        Gad28,a5
  1872.     move.w        gg_LeftEdge(a5),d0
  1873.     move.w        gg_TopEdge(a5),d1
  1874.     subq.w        #4,d0
  1875.     move.w        gg_Height(a5),d2
  1876.     add.w        d2,d1
  1877.     subq.w        #1,d1
  1878.     move.l        WindowRastPort,a1
  1879.     CALLGRAF    Draw
  1880.  
  1881.     moveq        #0,d0
  1882.     move.b        ShinePen,d0
  1883.     move.l        WindowRastPort,a1
  1884.     CALLGRAF    SetAPen
  1885.     lea        Gad27,a5
  1886.     move.w        gg_LeftEdge(a5),d0
  1887.     move.w        gg_TopEdge(a5),d1
  1888.     subq.w        #3,d0
  1889.     move.l        WindowRastPort,a1
  1890.     CALLGRAF    Move
  1891.     lea        Gad28,a5
  1892.     move.w        gg_LeftEdge(a5),d0
  1893.     move.w        gg_TopEdge(a5),d1
  1894.     subq.w        #3,d0
  1895.     move.w        gg_Height(a5),d2
  1896.     add.w        d2,d1
  1897.     subq.w        #1,d1
  1898.     move.l        WindowRastPort,a1
  1899.     CALLGRAF    Draw
  1900.  
  1901.     move.l        Indicator1X,d0
  1902.     move.l        Indicator1Y,d1
  1903.     move.l        WindowRastPort,a0
  1904.     lea        DispBorder,a1
  1905.     CALLINT        DrawBorder
  1906.     
  1907.     move.l        Indicator2X,d0
  1908.     move.l        Indicator2Y,d1
  1909.     move.l        WindowRastPort,a0
  1910.     lea        DispBorder,a1
  1911.     CALLINT        DrawBorder
  1912.  
  1913.     moveq        #2,d0
  1914.     moveq        #2,d1
  1915.     add.w        LeftBorder,d0
  1916.     add.w        TopBorder,d1
  1917.     move.l        WindowRastPort,a0
  1918.     lea        MainBorder,a1
  1919.     CALLINT        DrawBorder
  1920.  
  1921.     bsr        UpdGuru
  1922.     bsr        UpdDos
  1923.     bsr        RefMain
  1924.     rts        
  1925.  
  1926. * InitIndCoords
  1927. InitIndCoords
  1928.     lea        Gad27,a5
  1929.     move.w        gg_TopEdge(a5),d1
  1930.     andi.l         #$0000FFFF,d1
  1931.     moveq        #2,d0
  1932.     add.w        LeftBorder,d0
  1933.     move.l        d0,Indicator1X
  1934.     move.l        d1,Indicator1Y
  1935.  
  1936.     lea        Gad27,a5
  1937.     move.w        gg_TopEdge(a5),d1
  1938.     andi.l         #$0000FFFF,d1
  1939.     lea        Gad15,a5
  1940.     move.w        gg_LeftEdge(a5),d0
  1941.     andi.l         #$0000FFFF,d0
  1942.     move.l        d0,Indicator2X
  1943.     move.l        d1,Indicator2Y
  1944.     rts
  1945.  
  1946. * Initialize slider
  1947. InitPropGad
  1948.     lea        Gad29,a0
  1949.  
  1950.     move.w        FontY,d0
  1951.     mulu.w        #8,d0
  1952.     addq.w        #4,d0
  1953.     move.w        d0,gg_Height(a0)
  1954.     
  1955.     lea        Gad27,a1
  1956.     move.w        gg_LeftEdge(a1),d0
  1957.     move.w        gg_Width(a1),d1
  1958.     add.w        d1,d0
  1959.     sub.w        #12,d0
  1960.     move.w        d0,gg_LeftEdge(a0)
  1961.  
  1962.     moveq        #3,d0
  1963.     add.w        TopBorder,d0
  1964.     move.w        d0,gg_TopEdge(a0)
  1965.     rts
  1966.          
  1967. * Clear Temporary screen
  1968. ClrScr    moveq        #0,d0
  1969.     move.l        FakeRast,a1
  1970.     CALLGRAF    SetRast
  1971.     rts
  1972.  
  1973. * Reset Display in Guru window
  1974. * = slider to zero, copy contents of temp to display.
  1975. ResScr    lea        Gad29,a0
  1976.     move.l        WindowPtr,a1
  1977.     lea        0.w,a2
  1978.     move.w        #AUTOKNOB!FREEVERT!PROPNEWLOOK,d0
  1979.     moveq        #0,d1
  1980.     moveq        #0,d2
  1981.     move.w        #-1,d3
  1982.     move.w        #16384,d4
  1983.     moveq        #1,d5
  1984.     CALLINT        NewModifyProp
  1985.     bsr        RefMain
  1986.     rts
  1987.  
  1988. ScrollUp
  1989.     lea        PropInfo29,a0
  1990.     moveq        #0,d1
  1991.     move.w        pi_VertPot(a0),d1        SY
  1992.     cmpi.l        #3000,d1
  1993.     blt.s        .skip
  1994.     sub.w        #3000,d1
  1995.     move.l        d1,d2
  1996.     bra.s        .upd
  1997. .skip    moveq        #0,d2
  1998. .upd    lea        Gad29,a0
  1999.     move.l        WindowPtr,a1
  2000.     lea        0.w,a2
  2001.     move.w        #AUTOKNOB!FREEVERT!PROPNEWLOOK,d0
  2002.     moveq        #0,d1
  2003.     move.w        #-1,d3
  2004.     move.w        #16384,d4
  2005.     moveq        #1,d5
  2006.     CALLINT        NewModifyProp
  2007.     bsr.s        RefMain
  2008.     rts
  2009.  
  2010. ScrollDown
  2011.     lea        PropInfo29,a0
  2012.     moveq        #0,d1
  2013.     move.w        pi_VertPot(a0),d1        SY
  2014.     cmpi.l        #62535,d1
  2015.     bgt.s        .skip
  2016.     add.w        #3000,d1
  2017.     move.l        d1,d2
  2018.     bra.s        .upd
  2019. .skip    move.w        #$FFFF,d2
  2020. .upd    lea        Gad29,a0
  2021.     move.l        WindowPtr,a1
  2022.     lea        0.w,a2
  2023.     move.w        #AUTOKNOB!FREEVERT!PROPNEWLOOK,d0
  2024.     moveq        #0,d1
  2025.     move.w        #-1,d3
  2026.     move.w        #16384,d4
  2027.     moveq        #1,d5
  2028.     CALLINT        NewModifyProp
  2029.     bsr.s        RefMain
  2030.     rts
  2031.  
  2032. * Copy contents of temp. image to main display
  2033. RefMain    move.l        #65536,d0
  2034.     move.w        FontY,d1
  2035.     andi.l         #$0000FFFF,d1
  2036.     mulu.w        #24,d1
  2037.     divu.w        d1,d0                D0=offspp
  2038.     moveq        #0,d7
  2039.     move.w        d0,d7                D7=offspp
  2040.     
  2041.     moveq        #0,d0                SX
  2042.     moveq        #0,d0
  2043.     lea        PropInfo29,a0
  2044.     moveq        #0,d1
  2045.     move.w        pi_VertPot(a0),d1        SY
  2046.     divu.w        d7,d1
  2047.     swap         d0
  2048.     move.w        #0,d0
  2049.     swap        d0
  2050.         
  2051.     moveq        #5,d2
  2052.     add.w        LeftBorder,d2            DX
  2053.     moveq        #5,d3
  2054.     add.w        TopBorder,d3            DY
  2055.  
  2056.     move.l        DisplayWidth,d4            SiX
  2057.  
  2058.     move.w        FontY,d5
  2059.     mulu.w        #8,d5
  2060.     andi.l         #$0000FFFF,d5            SiY
  2061.     
  2062.     lea        FakeBitmap,a0
  2063.     move.l        WindowRastPort,a1
  2064.     
  2065.     moveq        #0,d0
  2066.     move.b        #$C0,d6
  2067.     CALLGRAF    BltBitMapRastPort
  2068.     rts        
  2069.     
  2070. * DrawLogo
  2071. DrawLogo
  2072.     bsr        ClrScr
  2073.     move.l        FakeRast,a0
  2074.     lea        GuruLogoImg,a1
  2075.  
  2076.     move.l        DisplayWidth,d0
  2077.     divu.w        #2,d0
  2078.     sub.w        #103,d0
  2079.     cmpi.w        #0,d0
  2080.     blt.s        .done    
  2081.     andi.l        #$0000FFFF,d0    
  2082.  
  2083.     moveq        #0,d1
  2084.     move.w        FontY,d1    
  2085.     mulu.w        #4,d1
  2086.     sub.w        #25,d1
  2087.     cmpi.w        #0,d1
  2088.     blt.s        .done    
  2089.     andi.l        #$0000FFFF,d1    
  2090.  
  2091.     CALLINT        DrawImage
  2092.  
  2093. .done    bsr        ResScr
  2094.     rts
  2095.  
  2096. * Slider movements update
  2097. Slider    move.w        gg_GadgetID(a2),d2        Which gadget
  2098.     cmpi.w        #29,d2
  2099.     bne        Message                Not da slider
  2100.  
  2101. .loop    CALLGRAF    WaitTOF
  2102.     bsr        RefMain    
  2103.  
  2104.     move.l        WindowUserPort,a0
  2105.     CALLEXEC    WaitPort
  2106.  
  2107. .msg    move.l        WindowUserPort,a0
  2108.     CALLEXEC    GetMsg
  2109.     tst.l        d0
  2110.     beq.s        .loop
  2111.     
  2112.     move.l        d0,a1
  2113.     move.l        im_Class(a1),d2        ; Soort msg
  2114.     move.l        im_IAddress(a1),a2    ; naar gadget
  2115.     CALLEXEC    ReplyMsg
  2116.     
  2117.     cmpi.l        #IDCMP_GADGETUP,d2
  2118.     beq.s        .Released
  2119.     
  2120.     bra.s        .msg
  2121.  
  2122. .Released
  2123.     bra        Message
  2124.  
  2125. * Update Guru display
  2126. UpdGuru    moveq        #0,d0
  2127.     move.l        WindowRastPort,a1
  2128.     CALLGRAF    SetAPen
  2129.     
  2130.     move.l        Indicator1X,d0
  2131.     move.l        Indicator1Y,d1
  2132.     addq.l        #2,d0
  2133.     addq.l        #1,d1
  2134.  
  2135.     lea        DispBrdDat,a0
  2136.     move.w        (a0),d2    
  2137.     andi.l        #$0000FFFF,d2
  2138.     subq.l        #3,d2
  2139.     add.l        d0,d2
  2140.  
  2141.     move.l        d0,d6
  2142.     move.l        d2,d7
  2143.  
  2144.     move.l        d1,d3
  2145.     add.w        FontY,d3
  2146.     addq.l        #1,d3
  2147.     move.l        WindowRastPort,a1
  2148.     CALLGRAF    RectFill
  2149.     
  2150.     lea        GuruString,a0
  2151.     bsr        TextLength
  2152.     
  2153.     sub.l        d6,d7
  2154.     divu.w        #2,d7
  2155.     divu.w        #2,d0
  2156.     andi.l        #$0000FFFF,d0
  2157.     andi.l        #$0000FFFF,d7
  2158.     sub.l        d0,d7
  2159.     
  2160.     move.l        d7,d0
  2161.     add.l        Indicator1X,d0
  2162.     addq.l        #2,d0
  2163.     move.l        Indicator1Y,d1
  2164.     addq.l        #2,d1
  2165.     add.w        FontBase,d1
  2166.  
  2167.     move.l        WindowRastPort,a1
  2168.     CALLGRAF    Move
  2169.  
  2170.     moveq        #0,d0
  2171.     move.b        DarkPen,d0
  2172.     move.l        WindowRastPort,a1
  2173.     CALLGRAF    SetAPen
  2174.     
  2175.     moveq        #7,d7
  2176.     moveq        #0,d6
  2177.     lea        GuruString,a5
  2178. .loop    addq.w        #1,d6
  2179.     move.b        GuruOffset,d5
  2180.     cmp.b        d6,d5
  2181.     beq.s        .skip
  2182.     bra.s        .skip2    
  2183.  
  2184. .skip    moveq        #0,d0
  2185.     move.b        ShinePen,d0
  2186.     move.l        WindowRastPort,a1
  2187.     CALLGRAF    SetAPen
  2188.     bra.s        .skip3    
  2189.  
  2190. .skip2    moveq        #0,d0
  2191.     move.b        DarkPen,d0
  2192.     move.l        WindowRastPort,a1
  2193.     CALLGRAF    SetAPen
  2194.  
  2195. .skip3    move.l        WindowRastPort,a1
  2196.     move.l        a5,a0
  2197.     moveq        #1,d0
  2198.     CALLGRAF    Text
  2199.  
  2200.     addq.l        #1,a5    
  2201.     dbf        d7,.loop
  2202.     rts
  2203.  
  2204. * Update Dos display
  2205. UpdDos    moveq        #0,d0
  2206.     move.l        WindowRastPort,a1
  2207.     CALLGRAF    SetAPen
  2208.     
  2209.     move.l        Indicator2X,d0
  2210.     move.l        Indicator2Y,d1
  2211.     addq.l        #2,d0
  2212.     addq.l        #1,d1
  2213.  
  2214.     lea        DispBrdDat,a0
  2215.     move.w        (a0),d2    
  2216.     andi.l        #$0000FFFF,d2
  2217.     subq.l        #3,d2
  2218.     add.l        d0,d2
  2219.  
  2220.     move.l        d0,d6
  2221.     move.l        d2,d7
  2222.  
  2223.     move.l        d1,d3
  2224.     add.w        FontY,d3
  2225.     addq.l        #1,d3
  2226.     move.l        WindowRastPort,a1
  2227.     CALLGRAF    RectFill
  2228.     
  2229.     lea        DosString,a0
  2230.     bsr        TextLength
  2231.     
  2232.     sub.l        d6,d7
  2233.     divu.w        #2,d7
  2234.     divu.w        #2,d0
  2235.     andi.l        #$0000FFFF,d0
  2236.     andi.l        #$0000FFFF,d7
  2237.     sub.l        d0,d7
  2238.     
  2239.     move.l        d7,d0
  2240.     add.l        Indicator2X,d0
  2241.     addq.l        #2,d0
  2242.     move.l        Indicator2Y,d1
  2243.     addq.l        #2,d1
  2244.     add.w        FontBase,d1
  2245.  
  2246.     move.l        WindowRastPort,a1
  2247.     CALLGRAF    Move
  2248.  
  2249.     moveq        #0,d0
  2250.     move.b        DarkPen,d0
  2251.     move.l        WindowRastPort,a1
  2252.     CALLGRAF    SetAPen
  2253.     
  2254.     moveq        #2,d7
  2255.     moveq        #0,d6
  2256.     lea        DosString,a5
  2257. .loop    addq.w        #1,d6
  2258.     move.b        DosOffset,d5
  2259.     cmp.b        d6,d5
  2260.     beq.s        .skip
  2261.     bra.s        .skip2    
  2262.  
  2263. .skip    moveq        #0,d0
  2264.     move.b        ShinePen,d0
  2265.     move.l        WindowRastPort,a1
  2266.     CALLGRAF    SetAPen
  2267.     bra.s        .skip3    
  2268.  
  2269. .skip2    moveq        #0,d0
  2270.     move.b        DarkPen,d0
  2271.     move.l        WindowRastPort,a1
  2272.     CALLGRAF    SetAPen
  2273.  
  2274. .skip3    move.l        WindowRastPort,a1
  2275.     move.l        a5,a0
  2276.     moveq        #1,d0
  2277.     CALLGRAF    Text
  2278.  
  2279.     addq.l        #1,a5    
  2280.     dbf        d7,.loop
  2281.     rts
  2282.  
  2283. * Search for a given text string
  2284. * Note: THIS IS CASE SENSITIVE
  2285. * Inputs: a0 -> string, ends with $0
  2286. *      a1 -> startaddress
  2287. *      a2 -> end address
  2288. * Output: a0 -> address of BEGIN of string
  2289. *      a1 -> address at END of string
  2290. *      if not found, a0 = 0
  2291. Search    movem.l        d0-d3/a2-a4,-(SP)
  2292.     moveq        #0,d0
  2293.     move.l        a0,a4
  2294. .loop    move.b        (a4)+,d1
  2295.     addq.l        #1,d0
  2296.     cmpi.b        #0,d1
  2297.     bne.s        .loop
  2298.     subq.l        #2,d0        d0 contains string length-1
  2299.     
  2300. .loop2    move.l        d0,d1        Init match loop
  2301.     move.l        a0,a3
  2302.     move.l        a1,a4
  2303.     
  2304. .loop3    move.b        (a3)+,d2
  2305.     move.b        (a4)+,d3
  2306.     cmp.b        d2,d3
  2307.     bne.s        .nomatch
  2308.     dbf        d1,.loop3
  2309.     bra.s        .found
  2310.     
  2311. .nomatch
  2312.     addq.l        #1,a1        Search from next char
  2313.     
  2314.     move.l        a2,d2
  2315.     move.l        a1,d3
  2316.     cmp.l        d2,d3
  2317.     beq.s        .notfound
  2318.     bra.s        .loop2
  2319.  
  2320. .found    move.l        a1,a0
  2321.     move.l        a4,a1
  2322.     movem.l        (SP)+,d0-d3/a2-a4
  2323.     rts
  2324.     
  2325. .notfound
  2326.     lea        0.w,a0
  2327.     lea        0.w,a1
  2328.     movem.l        (SP)+,d0-d3/a2-a4
  2329.     rts
  2330.     
  2331. * Filter all bit 31's from data file guru nums
  2332. * Alter texts to s'th' printable
  2333. FilterFile
  2334.     move.l        GeneralAlert,a1        
  2335.     move.l        DosAlert,a2
  2336.  
  2337. .loop    lea        Node,a0
  2338.     bsr.s        Search
  2339.     move.l        a0,d0
  2340.     cmpi.l        #0,d0
  2341.     beq.s        .done
  2342.  
  2343.     move.b        (a1),d0
  2344.     cmpi.b        #'@',d0
  2345.     blt.s        .nohex
  2346.     subi.b        #7,d0
  2347. .nohex    subi.b        #'0',d0
  2348.     move.b        d0,d1
  2349.     and.b        #$7,d1
  2350.     add.b        #'0',d1
  2351.     move.b        d1,(a1)
  2352.     
  2353.     bra.s        .loop
  2354.     
  2355. .done    move.l        DataBuff,a0
  2356.     move.l        DataSize,d0
  2357.     subq.l        #1,d0        
  2358. .loop2    move.b        (a0),d1
  2359.     cmpi.b        #10,d1            Erase all lf's
  2360.     beq.s        .wis1
  2361.     addq.l        #1,a0
  2362.     dbf        d0,.loop2
  2363.     bra.s        .done2
  2364. .wis1    move.b        #1,(a0)+        Code must not print chr$(1) !!
  2365.     dbf        d0,.loop2            
  2366.  
  2367. .done2    move.l        DataBuff,a0
  2368.     move.l        DataSize,d0
  2369.     subq.l        #1,d0        
  2370. .loop3    move.b        (a0),d1
  2371.     move.b        1(a0),d2
  2372.     cmpi.b        #'\',d1            Erase all newlines & replace them
  2373.     beq.s        .wis2
  2374.     addq.l        #1,a0
  2375.     dbf        d0,.loop3
  2376.     bra.s        .done3
  2377.  
  2378. .wis2    cmpi.b        #'n',d2
  2379.     beq.s        .wis3
  2380.     addq.l        #1,a0
  2381.     dbf        d0,.loop3
  2382.     bra.s        .done3
  2383.     
  2384. .wis3    move.b        #1,(a0)+
  2385.     move.b        #10,(a0)
  2386.     dbf        d0,.loop3
  2387.  
  2388. .done3    rts
  2389.  
  2390.  
  2391. * Modify gadget structures according to colormap
  2392. * -> correct 3d look on ALL systems (?)
  2393. GadCol    cmpi.b        #1,ScreenDepth
  2394.     beq        .scheme2
  2395.  
  2396.     move.l        ScreenColorMap,a0    Get RGB values of pen 1 & 2
  2397.     moveq        #1,d0
  2398.     CALLGRAF    GetRGB4
  2399.     moveq        #0,d1
  2400.     move.w        d0,d1
  2401.  
  2402.     divu        #256,d1
  2403.     move.w        d1,d4
  2404.     move.w        #0,d1
  2405.     swap         d1
  2406.  
  2407.     divu        #16,d1
  2408.     move.w        d1,d5
  2409.     move.w        #0,d1
  2410.     swap         d1
  2411.     move.w        d1,d6
  2412.     
  2413.     moveq        #0,d0
  2414.     add.w        d4,d0
  2415.     add.w        d5,d0
  2416.     add.w        d6,d0
  2417.     divu        #3,d0
  2418.     move.w        d0,d2
  2419.     
  2420.     move.l        ScreenColorMap,a0
  2421.     moveq        #2,d0
  2422.     CALLGRAF    GetRGB4
  2423.     moveq        #0,d1
  2424.     move.w        d0,d1
  2425.  
  2426.     divu        #256,d1
  2427.     move.w        d1,d4
  2428.     move.w        #0,d1
  2429.     swap         d1
  2430.  
  2431.     divu        #16,d1
  2432.     move.w        d1,d5
  2433.     move.w        #0,d1
  2434.     swap         d1
  2435.     move.w        d1,d6
  2436.     
  2437.     moveq        #0,d0
  2438.     add.w        d4,d0
  2439.     add.w        d5,d0
  2440.     add.w        d6,d0
  2441.     divu        #3,d0
  2442.     move.w        d0,d3
  2443.     
  2444.     cmp.b        d2,d3
  2445.     bgt.s        .scheme1
  2446.     
  2447.     moveq        #1,d2
  2448.     moveq        #2,d3
  2449.     bra.s        .domod
  2450.     
  2451. .scheme1 moveq        #2,d2
  2452.     moveq        #1,d3
  2453.     bra.s        .domod
  2454.     
  2455. .scheme2 moveq        #1,d2
  2456.     moveq        #1,d3
  2457.     
  2458. .domod    move.b        d2,ShinePen
  2459.     move.b        d3,DarkPen
  2460.  
  2461.     lea        WinGads,a0        Modify structures
  2462. .loop    move.l        gg_GadgetRender(a0),a1
  2463.     move.b        d2,bd_FrontPen(a1)
  2464.     move.l        bd_NextBorder(a1),a1
  2465.     move.b        d3,bd_FrontPen(a1)
  2466.  
  2467.     move.l        gg_SelectRender(a0),a1
  2468.     move.b        d3,bd_FrontPen(a1)
  2469.     move.l        bd_NextBorder(a1),a1
  2470.     move.b        d2,bd_FrontPen(a1)
  2471.     
  2472.     move.l        (a0),d0
  2473.     cmpi.l        #0,d0
  2474.     beq.s        .done1
  2475.     move.l        (a0),a0
  2476.     bra.s        .loop
  2477.         
  2478. .done1    lea        DispBorder,a1
  2479.     move.b        d3,bd_FrontPen(a1)
  2480.     move.l        bd_NextBorder(a1),a1
  2481.     move.b        d2,bd_FrontPen(a1)
  2482.  
  2483.     lea        MainBorder,a1
  2484.     move.b        d3,bd_FrontPen(a1)
  2485.     move.l        bd_NextBorder(a1),a1
  2486.     move.b        d2,bd_FrontPen(a1)
  2487.  
  2488.     cmp.b        #1,ScreenDepth
  2489.     bne.s        .done2
  2490.  
  2491.     lea        WinGads,a0        
  2492. .loop2    move.w        #GFLG_GADGHCOMP,gg_Flags(a0)
  2493.  
  2494.     move.l        (a0),d0
  2495.     cmpi.l        #0,d0
  2496.     beq.s        .done2
  2497.     move.l        (a0),a0
  2498.     bra.s        .loop2
  2499.         
  2500. .done2    rts    
  2501.  
  2502. ** EMERGENCY, window too big, force topaz
  2503. FontTooBig
  2504.     cmpi.w        #36,Execvers
  2505.     blt.s        .kickskip
  2506.  
  2507.     lea        0.w,a0
  2508.     move.l        ScreenLock,a1
  2509.     CALLINT        UnlockPubScreen
  2510. .kickskip
  2511.     move.l        Font,a1
  2512.     CALLGRAF    CloseFont
  2513.     move.b        #1,tt_Topaz
  2514.     bra        CliStart
  2515.  
  2516.  
  2517.     include        /subs/loadfileallmem.s
  2518.  
  2519. _DOSBase    dc.l    0
  2520.  
  2521.     SECTION DataZone,Data
  2522.  
  2523. taggie        dc.l    WA_Left,100
  2524.         dc.l    WA_Top,50
  2525.         dc.l    WA_InnerWidth,344
  2526.         dc.l    WA_InnerHeight,176
  2527.         dc.l    TAG_DONE
  2528.  
  2529. ReqStruct    dc.l    EasyStruct_SIZEOF
  2530.         dc.l    0
  2531.         dc.l    ReqTitle
  2532. ReqBody        dc.l    0
  2533. ReqGad        dc.l    0
  2534.  
  2535. WinTags        dc.l    WA_Left,0
  2536.         dc.l    WA_Top,0
  2537.         dc.l    WA_InnerWidth,0
  2538.         dc.l    WA_InnerHeight,0
  2539.         dc.l    WA_Title,WinTitle
  2540.         dc.l    WA_ScreenTitle,ScrTitle
  2541.         dc.l    WA_IDCMP,IDCMP_GADGETUP!IDCMP_GADGETDOWN!IDCMP_CLOSEWINDOW!IDCMP_ACTIVEWINDOW!IDCMP_NEWSIZE!IDCMP_VANILLAKEY!IDCMP_MOUSEMOVE!IDCMP_RAWKEY
  2542.         dc.l    WA_AutoAdjust,-1
  2543.         dc.l    WA_CloseGadget,-1
  2544.         dc.l    WA_DragBar,-1
  2545.         dc.l    WA_Activate,-1
  2546.         dc.l    WA_SmartRefresh,-1
  2547.         dc.l    WA_DepthGadget,-1
  2548.         dc.l    WA_Zoom,ZoomSize
  2549.         dc.l    WA_RMBTrap,-1
  2550.         dc.l    WA_NoCareRefresh,-1
  2551.         dc.l    WA_PubScreen
  2552. WinScreen    dc.l    0
  2553.         dc.l    TAG_DONE
  2554.  
  2555. Window1.3    dc.w    0,0
  2556.         dc.w    0,0
  2557.         dc.b    0,1
  2558.         dc.l    IDCMP_GADGETUP!IDCMP_CLOSEWINDOW!IDCMP_ACTIVEWINDOW!IDCMP_GADGETDOWN!IDCMP_VANILLAKEY!IDCMP_MOUSEMOVE
  2559.         dc.l    WFLG_CLOSEGADGET!WFLG_DRAGBAR!WFLG_DEPTHGADGET!WFLG_RMBTRAP!WFLG_NOCAREREFRESH
  2560.         dc.l    0
  2561.         dc.l    0
  2562.         dc.l    WinTitle
  2563.         dc.l    0
  2564.         dc.l    0
  2565.         dc.w    0,0,0,0
  2566.         dc.w    WBENCHSCREEN
  2567.  
  2568. IDTXT        dc.l    0
  2569. ByTXT        dc.l    0
  2570. Dummy1        dc.l    0
  2571. SetTXT        dc.l    SetTXTDat
  2572. GuruTXT        dc.l    GuruTXTDat
  2573. LastTXT        dc.l    LastTXTDat
  2574. DefaultTXT    dc.l    DefaultTXTDat
  2575. DosTXT        dc.l    DosTXTDat
  2576. InfoTXT        dc.l    InfoTXTDat
  2577. QuitTXT        dc.l    QuitTXTDat
  2578. Dummy2        dc.l    0
  2579. ErrDTXT        dc.l    ErrDTXTDat
  2580. ErrDRTXT    dc.l    ErrDRTXTDat
  2581. ErrInDTXT    dc.l    ErrInDTXTDat
  2582. ErrInDRTXT    dc.l    ErrInDRTXTDat
  2583. KeyGURU        dc.l    KeyGURUKey
  2584. KeyLAST        dc.l    KeyLASTKey
  2585. KeyDEFAULT    dc.l    KeyDEFAULTKey
  2586. KeyDOS        dc.l    KeyDOSKey
  2587. KeyABOUT    dc.l    KeyABOUTKey
  2588. KeyQUIT        dc.l    KeyQUITKey
  2589. Dummy3        dc.l    0
  2590. Dummy4        dc.l    0
  2591.  
  2592. ZoomSize    dc.w    50
  2593.         dc.w    0
  2594.         dc.w    200
  2595. TopBorder    dc.w    0
  2596.  
  2597. FakeBitmap    dc.w    0
  2598.         dc.w    0
  2599.         dc.b    0
  2600.         dc.b    1
  2601.         dc.w    0
  2602.         dc.l    0
  2603.         
  2604. Topaz        dc.l    TopazFont
  2605.         dc.w    8
  2606.         dc.b    0
  2607.         dc.b    1
  2608.         
  2609. GuruOffset    dc.b    1
  2610. DosOffsetTemp    dc.b    1
  2611.  
  2612. WinTitle    dc.b    'The Guru 3.02',0
  2613. ScrTitle    dc.b    'The Guru 3.02 ©1996 by E.Lensink',0
  2614.  
  2615. ReqTitle    dc.b    'Guru 3.0',0
  2616.  
  2617. Intname        dc.b    'intuition.library',0
  2618. Gfxname        dc.b    'graphics.library',0
  2619. Dosname        dc.b    'dos.library',0
  2620. Iconname    dc.b    'icon.library',0
  2621.  
  2622. AutoFront    dc.b    'AUTOFRONT',0
  2623. AutoMatic    dc.b    'AUTOMATIC',0
  2624. PubScr        dc.b    'PUBSCREEN',0    
  2625. Language    dc.b    'LANGUAGE',0
  2626. DataFile    dc.b    'DATAFILE',0
  2627. ForceTopaz    dc.b    'TOPAZ',0
  2628. DefLanguage    dc.b    'English.lang',0
  2629. DefData        dc.b    'Error.data',0
  2630.  
  2631. SetTXTDat    dc.b    'SET',0
  2632. GuruTXTDat    dc.b    'GURU',0
  2633. LastTXTDat    dc.b    'LAST',0
  2634. DefaultTXTDat    dc.b    'DEFAULT',0
  2635. DosTXTDat    dc.b    'DOS',0
  2636. InfoTXTDat    dc.b    'ABOUT',0
  2637. QuitTXTDat    dc.b    'QUIT',0
  2638. ErrDTXTDat    dc.b    'Error: Couldn''t open data file...',0
  2639. ErrDRTXTDat    dc.b    'OK',0
  2640. ErrInDTXTDat    dc.b    'Error in data file...',0
  2641. ErrInDRTXTDat    dc.b    'OH NO!',0
  2642. KeyGURUKey    dc.b    'G',0
  2643. KeyLASTKey    dc.b    'L',0
  2644. KeyDEFAULTKey    dc.b    'R',0
  2645. KeyDOSKey    dc.b    'O',0
  2646. KeyABOUTKey    dc.b    'U',0
  2647. KeyQUITKey    dc.b    'Q',0
  2648.  
  2649. Letters        dc.b    '1234567890ABCDEF'
  2650. GuruString    dc.b    '00000000',0
  2651. DosString    dc.b    '000',0
  2652.  
  2653. SGuruString    dc.b    '@NODE('
  2654. GuruStringTemp    dc.b    '00000000'
  2655.         dc.b    ')',0
  2656.         
  2657. SGuruHeader    dc.b    ' )',1
  2658.         dc.b    'Guru: '
  2659. SHeaderString    dc.b    '00000000',10
  2660.         dc.b    '@ENDNODE  '
  2661.  
  2662. SDosString    dc.b    '@NODE('
  2663. DosStringTemp    dc.b    '000'
  2664.         dc.b    ')',0
  2665.  
  2666. GenAl        dc.b    '@GENERAL',0
  2667. Sub1        dc.b    '@SUBSYS1',0
  2668. Sub2        dc.b    '@SUBSYS2',0
  2669. Sub3        dc.b    '@SUBSYS3',0
  2670. DosAl        dc.b    '@DOS',0
  2671. EndFile        dc.b    '@ENDFILE',0
  2672. Node        dc.b    '@NODE(',0
  2673. UnkGuru        dc.b    '@NODE(UNKNOWNGURU)',0
  2674. UnkDos        dc.b    '@NODE(UNKNOWNDOS)',0
  2675. Dead        dc.b    '@NODE(DEADEND)',0
  2676. Reco        dc.b    '@NODE(RECOVERY)',0
  2677. EndNode        dc.b    '@ENDNODE',0
  2678.  
  2679. AboutText    dc.b    ' )',1
  2680.         dc.b    'The Guru, version 3.02',10
  2681.         dc.b    'Compile date: February 10, 1996',10,10
  2682.         dc.b    'Created by E.Lensink entirely in assembly using '
  2683.         dc.b    'HiSoft Devpac 3.',10,10
  2684.         dc.b    'If you want to contact me for any reason, don''t hesitate '
  2685.         dc.b    'to write to:',10
  2686.         dc.b    'Emiel Lensink',10
  2687.         dc.b    'Notengaarde 33',10
  2688.         dc.b    '3992 JR, Houten',10
  2689.         dc.b    'Holland',10,10
  2690.         dc.b    'Or through e-mail at: emiell@odie.et.fnt.hvu.nl',10,10
  2691.         dc.b    'This program is postware, so if you like it, send '
  2692.         dc.b    'me a postcard of your hometown.',10
  2693.         dc.b    ' ',10
  2694.         dc.b    '@ENDNODE  '
  2695.  
  2696. TopazFont    dc.b    'topaz.font',0
  2697.  
  2698.     SECTION BSSZone,Bss
  2699.  
  2700. _IntuitionBase    ds.l    1
  2701. _GfxBase    ds.l    1
  2702. _IconBase    ds.l    1
  2703.  
  2704. WindowPtr    ds.l    1
  2705. WindowRastPort    ds.l    1
  2706. WindowUserPort    ds.l    1
  2707. ScreenLock    ds.l    1
  2708. ScreenFont    ds.l    1
  2709. WindowWidth    ds.l    1
  2710. DisplayWidth    ds.l    1
  2711.  
  2712. GeneralAlert    ds.l    1
  2713. Subsys1        ds.l    1
  2714. Subsys2        ds.l    1
  2715. Subsys3        ds.l    1
  2716. DosAlert    ds.l    1
  2717. EndOfFile    ds.l    1
  2718. UnknownDos    ds.l    1
  2719. UnknownGuru    ds.l    1
  2720. Recovery    ds.l    1
  2721. Deadend        ds.l    1
  2722.  
  2723.  
  2724. FakeBmSize    ds.l    1
  2725. FakeBmPtr    ds.l    1
  2726.  
  2727. Indicator1X    ds.l    1
  2728. Indicator1Y    ds.l    1
  2729. Indicator2X    ds.l    1
  2730. Indicator2Y    ds.l    1
  2731.  
  2732. Font        ds.l    1
  2733. FontY        ds.w    1
  2734. FontBase    ds.w    1
  2735.  
  2736. FakeRast    ds.l    1
  2737. Temp        ds.l    1
  2738.  
  2739. Widest        ds.l    1
  2740. WidLett        ds.l    1
  2741. WidArrow    ds.l    1
  2742.  
  2743. LangSize    ds.l    1
  2744. LangBuff    ds.l    1
  2745. DataSize    ds.l    1
  2746. DataBuff    ds.l    1
  2747. PrintHandle    ds.l    1
  2748.  
  2749. LeftBorder    ds.w    1
  2750. Execvers    ds.w    1    
  2751. CursY        ds.w    1
  2752. ScreenColorMap    ds.l    1
  2753.  
  2754. tt_AutoFront    ds.b    1
  2755. tt_PubScreen    ds.b    1
  2756. tt_Topaz    ds.b    1
  2757. tt_AutoMatic    ds.b    1
  2758. GuruOffsetTemp    ds.b    1
  2759. DosOffset    ds.b    1
  2760. FoundErr    ds.b    1
  2761. Corrected    ds.b    1
  2762. TempPrintBuff    ds.b    2560
  2763. ShinePen    ds.b    1
  2764. DarkPen        ds.b    1
  2765. ScreenDepth    ds.b    1
  2766.  
  2767.     SECTION    Gadgets,Data
  2768.     
  2769. WinGads    include    Gadgets.i
  2770.  
  2771.     SECTION    Logo,Data_C
  2772.     
  2773.     include    GuruLogo.i